Java第六课

这节Java课程主要讲解了面向对象的特性,包括抽象、封装、继承和多态。在继承中,讨论了子类如何扩展父类的属性和方法,以及构造方法的调用顺序。此外,还通过课堂练习强调了多态的概念,即同一个方法在不同对象上的执行可能有不同的结果。

1 Javase第六课:OOP特性继承多态

1.1 回顾 :

  1. 面向对象 java:OOP , 面向过程C ;二者区别大家要简单的了解一下;
  2. 类(相同属性和行为的对象的集合),对象(现实世界存在的可以被描述的事物), 类是对象的类型,对象是类的实例;
  3. 如何从一个类得到一个对象? 类名 对象名 = new 类名(参数);
  4. 类的基本结构:
    Public class 类名{
    //类名字要怎么命名? 每个单词的首字母大写 Student/StudentScore
    //常见的 属性和方法
    // 静态的代码段,普通的代码段,…..
    }
    类的修饰符? Public ,默认,不能为private

这里写图片描述

  1. 属性:
    属性也称为类的成员,是有默认值; 全局的变量;
  2. 方法的定义
    参数和返回值来匹配:

这里写图片描述

  1. 封装:
    将类内部的一些细节隐藏起来;保护内部数据的方式; 将属性私有化,提供公共的方法来访问私有的属性,可以在公共方法中(setter getter)中加入一些存(setter) 取(getter)的限制;

这里写图片描述
这里写图片描述

  1. 方法的重载:
    在同一个类中,方法名相同,参数项不同; 方法名复用,多态的一种表现形式;

这里写图片描述

  1. 构造方法:
    无返回类型 方法名和类名相同
    当我们使用new 创建一个对象的时候,会自动调用构造方法;
    初始化对象,同时可以给属性赋值;

1.2 作业讲解

课后作业:
1. 定义一个管理员类:
•显示管理员信息的方法:返回管理员用户名和密码的信息;toString
•验证用户密码的方法:传入用户名和密码的参数,返回布尔类型,用户名和密码是否正确。
•编写一个测试类,创建一个管理员类对象,初始化设置用户名和密码,控制台接收用户输入的用户名和密码,调用验证的方法,显示是否登录成功。

package test;

public class Admin {
    private String userName;
    private String userPwd;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPwd() {
        return userPwd;
    }

    public void setUserPwd(String userPwd) {
        this.userPwd = userPwd;
    }

    public String getInfo() {
        return userName + "," + userPwd;
    }

    @Override
    public String toString() {
        return "Admin [userName=" + userName + ", userPwd=" + userPwd + "]";
    }

    /**
     * 用户登录(验证用户名和密码的方法)
     * 
     * @param name
     *            用户名
     * @param pwd
     *            密码
     * @return true 验证通过 false 验证不通过
     */
    public boolean login(String name, String pwd) {
        if (name.equals(userName) && pwd.equals(userPwd)) {
            return true;
        }
        return false;
    }
}
package test;

import java.util.Scanner;

public class TestAdmin {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Admin admin = new Admin();

        // 调用setter方法,初始化用户名和密码s
        admin.setUserName("老王");
        admin.setUserPwd("123456");

        System.out.println("请输入用户名和密码");
        // 接收
        Scanner input = new Scanner(System.in);

        String name = input.nextLine();
        String pwd = input.nextLine();

        // 调用admin对象的login的方法
        boolean flag = admin.login(name, pwd);
        if (flag) {
            System.out.println("验证通过");
            // 此处输出admin调用的是toString

            System.out.println(admin);
        } else {
            System.out.println("验证没有通过,用户名或者密码错误");
        }

    }

}
  1. 自定义方法,判断一个数字是否是质数,要求有参数(要判断的数字是几 int n)有返回值(是否是质数 boolean)。
  2. 自定义方法,判断一个字符串是否是回文,要求有参数(参数就是一个字符串)无返回值(方法中直接输出结果)。
  3. 定义一个方法,模拟鸡叫声三种方法实现(重载) ; 自由发挥;
  4. 定义一个动物园,有很多动物,动物园动物可以进行表演。要求:使用重载和构造;
  5. 自定义类和对象,描述两个人吵架。

1.3 面向对象特征

1.3.1 抽象

1.3.2 封装

1.3.3 继承

1.java中,若两个类 满足A is B(A是B),那么可以理解成A继承B,大学生(A)是学生(B)吗,认为大学生继承学生类,此时大学生称为子类(派生类),学生类称为父类(基类)
2.实现继承:关键字:extends—>class A extends B ,A–子类 B–父类
子类可以继承父类的所有公开的属性和方法,但是构造方法不能被继承
java中的类之间只能支持单继承,一个类只能有一个直接的父类,但是可以多层继承(A继承B,B继承C)
父类更通用,子类更具体,子类不仅可以继承父类的公有属性和方法,还可以拓展自己的属性和方法
含义:发生在继承关系的子类中,在子类的某个方法, 方法的修饰符,返回值类型,方法名,参数列表和父类的某一个方法完全一样,称为方法的重写.

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

问题: 自定义一个类的时候,可以调用一个方法toString,这个方法是从Object继承而来; java.lang.Object

这里写图片描述

1.3.4 关于继承中对象的创建:

继承中对象和引用关系

这里写图片描述

父类:

这里写图片描述

子类

这里写图片描述

测试类:

这里写图片描述

父类对象不能强制转换为子类的引用:

这里写图片描述
这里写图片描述

1.3.5 构造方法的调用顺序:

创建子类对象的时候,会调用子类和父类的构造,默认调用的是子类和父类的无参数的构造,而且,父类的无参数的构造先执行.

>

Super必须出现在构造方法中的第一行位置.

1.3.6 课堂练习:

模拟课堂上课:大洋(JavaTeacher)来了,我们开始上正经的java课程;娜姐(Driver)来了,我们就开始开车;骥骁(OldDriver)来了,我们就上职业素养课,飙车. 参考代码请见(day07-多态)

这里写图片描述

1.3.7 多态

同一个方法;

这里写图片描述

对于不同的对象, JavaTeacher的对象,Driver的对象,OldDriver的对象; 执行过程和结果可能是不同的; 多态;
多态的实现方式: 使用继承 ;
操作步骤: 创建父类;创建子类,重写父类的方法;特定场景中,将父类引用作为参数;实际参数为子类对象;执行的过程和结果和子类对象有关;

不同的对象,对于同一个消息的执行(方法的执行)过程和响应是不同的.

这里写图片描述

将父类作为一个方法的参数,此时的形式参数,定义方法的时候,并不确定这个参数的实际对象; jt.teach() ;看起来是父引用的那个方法名

这里写图片描述

实际调用的时候,传递的参数为子类的对象;当我们的代码执行的过程中; jt.teach()的执行,实际上是子类特定的某个对象的方法;

1.4 总结:

1.5 作业

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值