1、为什么需要多态
我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。通过多态可以减少类中代码量,可以提高代码的可扩展性和可维护性。继承是多态的基础,没有继承就没有多态。
2、什么是多态
通俗的理解:多态,一重写,二重载。用汉字来打个比方,比如“开”这个字,在不同的时候各有的意思,比如“开门”,“开窗”,甚至有“开车”,“开饭”等,具有相同名称但操作不同。
多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
多态:是具有表现多种形态的能力的特征,同一个实现接口,使用不同的实例而执行不同的操作。
3、怎么用多态
多态在使用中就是按照一句话:父类的对象指向子类的引用。1.继承的存在(继承是多态的基础,没有继承就没有多态)
2.子类必须重写父类的方法(因为通过父类的引用只能调用父类里面定义的方法)
3.通过父类的引用指向子类的对象。(子类到父类的类型转换)
4.子类到父类的转换(向上转型)规则:
1.将一个父类的引用指向一个子类的对象,称为向上转型,自动进行类型转换
2.此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法
3.此时通过父类引用变量无法调用子类特有的方法。
5.父类到子类的转换(向下转型)
当向上转型发生后,将无法调用子类特有的方法,但是如果需要调用子类特有的方法时,可以通过把父类再转换成子类来实现。将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转型,此时必须进行强制类型转换。
6.Instanceof运算符
语法:对象 instanceof 类或接口在进行引用类型转换时,首先通过instanceof运算符进行类型判断,然后进行相应的强制类型转换,这样可以有效地避免出现类型转换异常。
资料:
使用instanceof时,对象的类型必须和instanceiof的第二个参数所指定的类或接口在继承上有上下级的关系,否则会出现编译错误。
Instanceof通常和强制类型转换结合使用