多态
父类的引用指向子类的类型
Father f = new Son();
而能执行的方法只看左边的类型.
父类可以指向子类,但不能调用子类独有的方法
如果非要调用,可以进行强制类型转换.
注意事项:
-
多态是方法的多态,属性没有多态
-
多态必须在父子类型之间,否则会类型转换异常
-
如果方法未重写,则执行左边类型的方法.
如果方法重写了,那么就执行子类的方法
-
父类引用指向子类对象.
无法重写的方法:
static #属于类
final #属于常量
private #私有化,无法被其他类访问
//以上修饰符修饰过的方法都不可以重写
instanceof
可以判断右侧类型和其他类型的亲属关系
Father f= new Grandson();
System.out.println(f instanceof Grandson);//true
System.out.println(f instanceof Son);//true
System.out.println(f instanceof String);//false
System.out.println(f instanceof Grandaughter);//false
#有父子类亲属关系为真,兄弟和陌生人为假
若左侧和其他类型无父子/祖孙等亲属关系,则会报错↓
a instanceof b
能不能编译通过:a与b是否为父子类
强制类型转换
父类无法直接调用子类独有的方法
但可以通过强制类型转换来调用
Father f = new Son();
#法一:借用中间变量
Son s = (Son) f;
s.show();
#法二:合并成一句话
((Son) f).show();
当子类型转换为父类(自动 无需强制)时,可能会丢失自己拥有的方法
注意点:
- 只能由父类的引用指向子类的对象
- 子类转父类,向上转型,自动
- 父类转子类,向下转型,强制
- 优点在于方便了方法的调用,减少了重复的代码