java多态

1.什么是多态

执行同一方法因为对象或实例不同而产生不同的结果,这就是多态

例如:

同样是打印一份文档,因为使用不同的打印机而得到不同的打印结果,

在程序中我们把打印看作是方法,不同的打印机看成是不同的对象,得到不同的结果,称之为多态。

多态的特点:同一引用类型,同样的方法在不同实例上得到不同的执行结果。

同一引用类型:一般指父类

不同:不同的实例(对象),同一方法有不同的结果

【1】编写父类

【2】编写子类,子类一定要重写/实现父类的方法

【3】运行时,父类类型 引用 子类对象

2.多态的实现形式

【1】父类类型 引用 子类对象(本质)

1 Father father = null;
2         father = new Sun("王多魚", "男");
3         father.dream("去当兵");

father = new Sun() 父类类型引用子类对象,当调用dream方法时,执行的是子类对象重写/实现dream方法。(父类没有实现的方法,其通过子类实现了,称之为方法的实现)

【2】父类作为方法中的参数

【3】父类作为方法的放回值

3.类型转换

多态中存在两种类型转换,一种是自动类型转换,一种是强制类型转换 在引用数据  转换过程中,

自动类型转换也称向上类型转换。子类可以自动转换成父类。(子转父自动 老爸管儿子)

1 Pet pet = null;
2 pet = new Dog(); //把子类对象赋给父类

强制类型转换也称下类型转换父类可以强制转换成子类。(父转子强制 儿子管父亲)

子类类型 引用 = (子类)父类对象

单一般来说还需要判断父类对象的真实性,instanceof关键字来判断

如果要调用子类特有的方法,一定要强制类型转换,通过instanceof鉴别具体类型

obj instanceof 类/接口   判断obj是否是类/接口的实例
public void play(Pet pet) {
        if(pet instanceof Dog) {
            Dog dog = (Dog) pet;
            dog.catchFlyDisc();
        }else if(pet instanceof Penguin) {
            Penguin penguin = (Penguin) pet;
            penguin.swimming();
        }
    }
原文地址:https://www.cnblogs.com/ruckly/p/10759560.html