目录
1.含义
多态是面对对象的三大特征之一
通常含义是指能够呈现多种不同的形式或形态,也就是根据用到不同对象类型,响应不同操作,方法重写是多态的基础。
1.重载是编译时的多态
2.重写是运行时多态
3.实现多态的三个条件
(1)子类继承父类,并且子类重写父类方法。
(2)父类引用指向子类对象(父类引用可以指向任意一个子类对象)。
(3)父类引用调用方法时,实际上调用的时子类的方法(父类指向哪个子类就调用哪个子类的方法),不同的子类有不同的方法实现,体现出同一个方法在不同子类中的不同形态的表现
4.调用的时候注意事项
(1)父类只能调用子类从父类继承的方法或者重写的方法。
(2)父类不能调用子类新增的方法。
2.向上转型
父类类型 引用变量名 = new 子类类型();
子类向父类转换称为向上转型
父类类型的变量引用了一个子类对象,向上转型
此时只能调用父类中声明的方法,子类扩展发方法不能调用,调用实例方法时,要看是哪个对象调用的就执行哪个方法
调用static方法时,调用的时父类方法
调用实例方法时看等号右边,static看等号左边
3.向下转型
就是想要调用子类方法时,可以通过把父类转换为子类实现,向下转型时必须使用强制类型转换。
语法规则:子类类型 引用变量名 = (子类类型)父类类型引用变量;
向下转型的过程里为了确保可以强制类型转换,需要先使用instanceof进行判断。
例如在Dog类中包含一个catchingDisc()方法是,它属于子类新增则只能做向下转型;
Dog dog = (Dog)pet; dog.catchingFlyDisc
4.instanceof
instanceof在有继承关系的类之间使用
在向下转型的过程中,如果不是真实的子类类型,会出现类型转换异常。
if(pet instanceof Dog dog) { dog.catchingFlyDisc(); } if(pet instanceof Bird bird) { bird.fly(); }
5.多态的优势
1.可替换性:多态对已存在的代码具有可替换性。
2.可扩充性:多态对代码有可扩充性
3.接口性:多态是父类向子类提供了一个共同借口,由子类来具体实现
4.灵活性多态在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性;多态简化了应用软件的代码编写和修改。
6.里式替换
子类对象应该能够替换其父类对象,而不会影响程序的正确性
父类能出现的地方,子类都可以出现
7.对象数组的使用
对象数组是Java中的一种数据结构,可以用于存储多个对象。在Java中,可以使用以下方式声明和初始化对象数组:
// 声明对象数组 ClassName[] objectName = new ClassName[arrayLength]; // 初始化对象数组 for (int i = 0; i < arrayLength; i++) { objectName[i] = new ClassName(); }