版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhoukikoo/article/details/79942653
上转型对象
父类 Father.java
package com.ggsddu.base.transition;
public class Father {
public void read() {
System.out.println("父类say方法");
}
public void onlyFather() {
System.out.println("父类方法,子类未重写此方法");
}
}
子类 Son.java
package com.ggsddu.base.transition;
public class Son extends Father {
@Override
public void read() {
System.out.println("子类重写say方法");
}
public void onlySon() {
System.out.println("子类自己的方法,父类没有");
}
}
测试一:
上转型对象utObj
可以调用的方法:
- 子类继承父类,重写的
print()
- 父类的方法(子类未重写)
onlyFather()
- 子类的方法(父类没有)
onlySon()
示例代码:
@Test
public void test() {
Father utObj = new Son();
utObj.print();
utObj.onlyFather();
((Son) utObj).onlySon();// 上转型对象类型可以强转为子类类型
}
打印结果:
子类重写父类say方法
父类方法,子类未重写此方法
子类定义方法,父类中没有
测试二:
父类对象可以调用的方法:
示例代码:
@Test
public void testFather() {
Father father = new Father();
father.print();
father.onlyFather();
// 下面类型转换,运行时报类型转换异常:java.lang.ClassCastException
Son son = (Son) father;// 父类类型对象强转为子类类型,编译正常,运行错误!
son.onlySon();
}
小结:
上转型对象
- 可以调用子类重写父类的方法
- 可以调用子类定义的独有的方法(这是肯定的)
- 可以调用父类的方法(子类继承父类,但是未重写的方法)(此处上转型对象类型需要墙砖为子类类型,此处另一个结论就是:上转型对象可以转换为子类类型!父类对象不行!)
- 父类对象类型强转为子类类型时,编译期正常,但是运行时会报类型转换异常!