多态

file

1.多态的格式即使用

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

格式:(左父右子)

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

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

public class Fu{
   public void method(){
       System.out.println("父类方法输出!");
   } 
}
public class Zi extends Fu{
    @Override
    public void method(){
        System.out.println("子类方法输出!");
    }
}
public class Demo01{
    public static void main(String [] args){
        Fu obj =new Zi();//这就体现了多态性
        obj.method();//new的是谁就运行谁,没有向上找
    }
}

2.多态中成员变量以及成员方法使用特点

访问成员变量的两种方式:

​ ①:直接通过对象名称访问成员变量,等号左边是谁就优先用谁,没有则向上找

​ ②:间接通过成员方法访问成员变量,看该方法属于谁则优先用谁,没有则向上找

(编译看左边,运行还看左边)

访问成员方法的规则:new的是谁则优先用谁,没有则向上找

(编译报错看左边有没有,运行看右边有没有)

3.使用多态的好处

file

4.对象的向上向下转型

file

向上转型一定是安全的,但是也有一个弊端:一旦向上转型为父类,那么将无法调用子类原本特有的内容

解决方法:对象的向下转型(实则是一种还原),必须原来是那种才行

5.instanceof关键字

如何才能知道一个父类引用对象,本来是什么子类?

使用instanceof关键字:

​ 对象 instanceof 类名称

​ 这将会得到一个Boolean值结果,也就是判断前面的对象能不能当成后面类型的实例

Animal animal=new Cat();//创建一个cat使其向上转型成animal

if(animal instanceof Cat){//看其能否还原成cat
    Cat cat=(cat)animal;
}