关于多态与Final关键字的学习(Java0基础)

1.多态

多态是在继承 / 实现情况下的一种现象 , 有两种表现形式 : 对象多态 / 行为多态 . ( java中成员变量没有多态 )

有三种情况可以表现出多态 :

  • 有继承 / 实现关系

  • 父类需引用子类对象时

  • 子类的方法需要重写时

多态的定义方法 : 使用父类接收子类新建的对象

例 : Animal d1 = new Dog();

注意 : 父类虽然接收了子类的对象 , 但不能用子类独有的方法 .

为了使用子类里独有的方法 , 会进行类型转换 :

  • 自动类型转换 : 父类 变量名 = new 子类();

    例 : Animal d1 = new Dog();

  • 强制类型转换 : 子类 变量名 = (子类) 父类变量;

    例 : Dog d2 = (Dog) d1;

    但强制类型转换有时在运行时会报错 :

    例 : Cat c = (Cat) d1; // d1的真实类型是Dog类 , 不是Cat

最好先判断对象的真实类型 , 再进行方法的调用

例 :

if(Animal instanceof d Dog){
    //如果是Dog对象则会调用Dog类里的eat方法
    d.lookHome();
}
else if(Animal instanceof c Cat){
    //如果是Cat对象则会调用Cat类里的eat方法
    c.catchMouse();
}

多态的好处 : 右边的对象是解耦合的 , 便于扩展与维护

1.1.练习

要求 :

  • 定义一个动物类 , 它具有名称 , 性别 , 年龄三个属性 , 具有吃饭的行为 .

  • 定义一个猫类 , 它继承动物类 , 其独有方法为抓老鼠 .

用多态的形式测试调用吃饭与抓老鼠的行为 .

示例 :

public class Animal { // 定义动物类(父类)
    private String name;
    private int age;
    private char sex;
    
    // 无参构造与有参构造
    public Animal() {
    }
​
    public Animal(String name, int age, char sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public int getAge() {
        return age;
    }
​
    public void setAge(int age) {
        this.age = age;
    }
​
    public char getSex() {
        return sex;
    }
​
    public void setSex(char sex) {
        this.sex = sex;
    }
​
    // eat方法
    public void eat(){
        System.out.println(name + "在吃饭");
    }
}
​
public class Cat extends Animal{ // 定义猫类(子类, 继承了动物类)
    public Cat() {
    }
​
    public Cat(String name, int age, char sex) {
        super(name, age, sex);
    }
​
    //猫类独有的catchMouse方法
    public void catchMouse(){
        System.out.println(getAge() + "岁的" + getName() + "在抓老鼠");
    }
}
​
public class test03 { // 测试类
    public static void main(String[] args) {
        Animal c1 = new Cat("狸花", 2, '女'); // 用父类来接收猫类对象
​
        c1.eat(); // 可直接调用父类的方法
​
        Cat c = (Cat) c1; // 强制转换为猫类
        c.catchMouse(); // 调用猫类的catchMouse方法
    }
}
​

2.final关键字

final可以用来修饰变量 , 方法 , 类 .

  • 修饰变量 : 变量成为了常量 , 只可被赋值一次 , 不可修改 .

  • 修饰方法 : 方法不可重写 .

  • 修饰类 : 类不可以拥有子类 , 不可被继承

注意 : final修饰引用数据类型时 , 地址不可改变 , 但堆内存中的数据是可以改变的 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值