向上转型和向下转型
程序员文章站
2024-03-21 19:20:52
...
向上转型
class Father
{
public void speak(){
System.out.print("Father");
}
}
class Son extends Father
{
//重写父类方法
public void speak(){
System.out.print("Son");
}
//扩展方法
public void prints(){
System.out.print("独有的");
}
}
//向上转型
Father f=new Son();
f.speak()
-
向上转型,父类引用的是子类对象,调用方法时会先调用子类中与父类同名的方法(重写父类的方法)
-
相当于父类的方法被覆盖,只有当子类没有该方法时才去父类中寻找但是父类中的private私有的,static静态的无法被覆盖,调用时还是调用父类的方法。
-
向上转型会暂时丢失子类的扩展的方法(父类不拥有的)
向下转型
Father f=new Son();
Son a=(Son)f
f.prints();
//本身是Son类型,向上转型之后还能向下转型,找回扩展的数据
//这种强转方式编译和运行都不会报错
Father f=new Father();
Son a=(Son)f
//这种编译没问题,运行出错。
- 向下转型有风险,因为继承同一父类的可能还有其他的子类,强转的时候可能是把其他子类的引用转成另一个子类,所以在强转时,不光要告诉它强转的类别,还要判断是否是该类别
if(Son instanceof Father)
{
Father f=new Son();
Son a=(Son)f
}
上一篇: 发段代码,看看大家怎样重构
下一篇: 带头循环双向链表