|
向上转型 |
向下转型 |
定义 |
把对某个对象的引用视为对其基类引用的做法 |
将超类的引用强制转换为子类类型 |
作用 |
调用导出类中的覆盖方法 |
调用导出类中的扩展方法 |
|
| |
代码: | ||
public class TestUpCastingOrDownCasting{
public static void main(String[] args){
father[] f = {new father(),new son1(),new son2(),new gs()};
for(int i=0; i< f.length; i++){
System.out.println("==============" + f[i] + "==============");
if(f[i] instanceof son2){
son2 s2 = (son2)f[i];
s2.s();
}
f[i].f();
}
}
}
class father{
public void f(){
System.out.println("父类的方法!");
}
}
class son1 extends father{
public void f(){
System.out.println("儿子1继承父类的方法!");
}
public void s(){
System.out.println("儿子1的方法!");
}
}
class son2 extends father{
public void f(){
System.out.println("儿子2继承父类的方法!");
}
public void s(){
System.out.println("儿子2的方法!");
}
}
class gs extends son2{
public void f(){
System.out.println("孙子通过儿子2继承父类的方法!");
}
public void s(){
System.out.println("孙子继承儿子2的方法!");
}
public void gs(){
System.out.println("孙子的方法!");
}
} | ||
输出结果: |
==========father@bdb503==========
父类的方法!
==========son1@b6e39f==========
儿子1继承父类的方法!
==========son2@119dc16==========
儿子2的方法!
儿子2继承父类的方法!
==========gs@c05d3b==========
孙子继承儿子2的方法!
孙子通过儿子2继承父类的方法! | |
执行语句: |
==========father@bdb503==========
father f = new father();
f.f();
===对父类的操作
==========son1@b6e39f==========
father f = new son1();
f.f();
==向上转型,覆盖父类的方法
==========son2@119dc16==========
father f = new son2();
son2 s2 = (son2)f; ==向下转型
s2.s();
f.f(); ==向上转型
==========gs@c05d3b==========
father f = new son2();
son2 s2 = (son2)f;
s2.s();
f.f(); | |
对gs@c05d3b理解: |
father f = new son2();
son2 s2 = (son2)f;
s2.s();
==执行语句过程中实现了一次向上转型son2 s2 = (son2)f;和向下转型s2.s();
f.f();
==实现的是向下转型 |
向上转型与向下转型(二)
原创文章标签 向上转型、向下转型、instanceof 文章分类 Java 后端开发
©著作权归作者所有:来自51CTO博客作者维风的原创作品,请联系作者获取转载授权,否则将追究法律责任
f[i] instanceof son2: 判断instanceof左边的对象是否是右边的类的实例
上一篇:Java学习之反射机制的理解
下一篇:我的友情链接
![](https://ucenter.51cto.com/images/noavatar_middle.gif)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章