Java基础知识笔记4--多态

多态

概述

多态是继封装、继承之后,面向对象的第三大特性。
生活中,比如跑的动作,小猫、小狗和大象,跑起来是不一样的。再比如飞的动作,昆虫、鸟类和飞机,飞起来也是不一样的。可见,同一行为,通过不同的事物,可以体现出来的不同的形态。多态,描述的就是这样的状态。

定义

指同一行为,具有多个不同表现形式。

前提

  1. 继承或者实现【二选一】
  2. 方法的重写【意义体现:不重写,无意义】
  3. 父类引用指向子类对象【格式体现】

代码实现

代码当中体现多态性,其实就是一句话:父类引用指向子类对象。

格式:

父类名称 对象名 = new 子类名称();

或者

接口名称 对象名 = new 实现类名称();

成员变量、方法访问规则

成员变量

1.直接通过子类对象访问成员变量:
等号左边是谁,就优先用谁,没有则向上找。
2.间接通过成员方法访问成员变量:
该方法属于谁,就优先用谁,没有则向上找。

与继承相同。

成员方法

右边new的是谁,就优先用谁,没有则向上找。

与继承相同。

口诀

成员变量:编译看左边,运行还看左边。

成员方法:编译看左边,运行看右边。

多态的好处

在这里插入图片描述

向下转型和向上转型

在这里插入图片描述

instanceof 关键字

为了避免ClassCastException的发生,Java提供了 instanceof 关键字,给引用变量做类型的校验,格式如下:

1.变量名 instanceof 数据类型
2.如果变量属于该数据类型,返回true。
3.如果变量不属于该数据类型,返回false。

public class Test {
    
    

    public static void main(String[] args) {
    
    
        Animal animal = new Dog();
        animal.eat();
        givePet(animal);
        givePet(new Cat());
    }

    public static void givePet(Animal animal){
    
    
        if(animal instanceof Dog){
    
    
            Dog d = (Dog) animal;
            d.protectHouse();
        }
        if(animal instanceof Cat){
    
    
            Cat c = (Cat) animal;
            c.catchMouse();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43215322/article/details/108684068