java中多态的理解,instanceof关键字,向上向下转型的理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33322074/article/details/86004414

一、多态的定义

比如:人可以是学生,也可以是老师,也可以是军人。这就表现了人的多种形态性。多态就是多种形态。

多态的最终体现为:父类的引用变量可以指向子类对象。

多态的前提是必须有子父类关系,或者类实现接口关系,否则无法完成多态。

在使用多态后,父类的引用变量调用方法时,会调用子类重写后的方法。

二、多态使用格式

多态的格式就是父类的引用变量指向子类对象。

此外:抽象类,接口都可以实现多态的形式。

三、多态的成员变量和方法。

这个很重要!

不管怎么样,父类必须有。但是变量运行的是父类的,方法运行的是子类的。

即:编译看父类,运行看子类。

四、关键字instanceof  

instanceof 关键字,用于引用类型的比较判断。有关系的判断。即:判断是不是给定的引用类型。

注意instanceof  只能对有继承关系的类,有实现关系的类的判断。其他关系类的判断是不行的。

五、多态中的向上转型

java中类型的转换包含自动类型转换和强制类型转换。多态的向上转型就属于自动类型转换。多态向下转型就是强制类型转变

除了引用类型的向上转型,还有引用类型的向下转型。如图

六、提出一个问题

1、为什么要进行向上向下转型。

向上转型表示:将子类的对象赋值给父类的引用对象。如果不向上转型,子类重写了自己的方法,子类只能调用自己重写的父类方法。

注意:向上转型后只能调用父类子类共有的方法,子类扩展的方法无法调用。父类的所有方法都被子类继承。即使子类没有重写,子类就是有。如果要调用子类自己的方法需要向下转型。

那么为什么不直接创建一个子类对象呢?

其实问题的关键在于,子类重写了父类的方法,向上转型让父类引用变量可以调用子类重写父类的方法。但不能调用子类重写的方法。如果要调用子类重写的方法,向下转型。向上转型还提升了扩展性,即:不需要创建子类实例

七、面向对象三大特征

1、封装:提高了安全性。

2、继承: 程序扩展性

3、多态:减少代码重复,提升扩展。没有方法重写,就没有多态。

八、小知识

匿名对象:

下面括号里可以写m,或者用匿名对象直接写new Mouse()。

在实际应用中,把方法的参数设置为接口,非常好。

猜你喜欢

转载自blog.csdn.net/qq_33322074/article/details/86004414