活动地址:CSDN21天学习挑战赛
1 多态的基本概念
1.1 多态的概念
多态(Polymorphism )按字面的意思就是“多种状态”,是面向对象的程序设计语言最核心的特征。从一定角度来看,封装和继承几乎都是为多态而准备的。
一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。
1.2 多态的分类
主要分类如下:
编译时多态(设计时多态)∶方法重载。
运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态。
我们平时说得多态,多指运行时多态。
1.3 多态的必要条件
多态的必要条件如下:
满足继承关系
父类引用指向子类引用
2 多态中的向上类型转型和向下类型转型
2.1 向上类型转型
向上类型转换(Upcast)将子类型转换为父类型:
隐式/自动类型转换,是小类型到大类型的转换。
对于向上的类型转换,不需要显示指定,即不需要加上前面的小括号和父类类型名。
2.2 向下转型
向下类型转换(Downcast )将父类型转换为子类型:
将一个指向子类对象的父类引用赋值给一个子类的引用。
强制类型转换,是大类型到小类型。
父类型的引用必须指向转型的子类的对象,即指向谁才能转换成谁。不然运行的时候会抛出异常。
我们可以通过instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题,提高代码的强壮性。instanceof 运算符用来判断对象是否可满足某个特定类型实例特征。返回值为true/false。一般用于 if 语句中。
如果左边对象是右边类的实例则返回 true,否则返回 false。
示例代码代码如下:
public class Test {
public static void main(String[] args)
{
Animal one = new Animal();
Animal two = new Cat();
one.eat();
two.eat();
if (two instanceof Cat)
{
Cat cat = (Cat)two;
two.eat();
}
}
}
3 多态中需要注意的点
注意:
1、父类引用指向子类实例时,可以调用子类重写父类的方法以及直接继承父类的方法,无法调用子类特有的方法。
2、静态static方法属于特殊情况,静态方法只能继承,不能重写。调用的时候用谁的引用,则调用谁的版本。