黑马程序员技术交流社区
标题:
小问题。。。。。。。
[打印本页]
作者:
lizhangzhi
时间:
2013-9-25 20:07
标题:
小问题。。。。。。。
class Outer {
String string="Outer string";
public void printing(){
System.out.println("Outer");
}
}
class inner extends Outer{
String string="inner string";
public void printing(){
System.out.println("inner");
}
}
public class Test2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Outer i=new inner();
(( Outer) i).printing();
System.out.println(((Outer)i).string);
}
}
复制代码
作者:
罗凯健
时间:
2013-9-25 20:12
问题是?
作者:
罗凯健
时间:
2013-9-25 20:26
假如你的问题是问为什么两次的打印结果不一样的话,我就说说吧。
根据Java的多态机制,父类引用指向子类对象的时候,它访问的方法是子类中的方法。所以打印的是子类中的属性。而访问引用中的属性的话,它还是指向本类的属性。
作者:
暮雨
时间:
2013-9-25 20:47
你是想问结果为什么是
inner
Outer string
复制代码
的吧。
其实也很简单,就是多态的表现吧,这里Outer i=new inner();就是多态的一个运用,多态实现的三个条件
1.有继承 2.有覆盖 3父类引用指向子类对象 很显然你的代码都满足。那么结果也是显而易见的
首先输出inner 是因为你在inner类里对Outer类的方法printing进行了重写(也就是覆盖),所以调用printing方法时就会调用inner类的printing方法。
第二个输出Outer string 是因为你的引用是Outer类的,(Outer)i).string 父类对象是看不到子类特有的东西的,所以访问的也还是父类的属性。
希望能帮到你。
作者:
问天
时间:
2013-9-25 21:15
同意楼上的说法, 还有 就此问题中 主方法中不必转型
作者:
疯宇
时间:
2013-9-26 02:17
你们好厉害啊,楼主没问,你们都能答上啊!{:soso_e179:}
作者:
黄炳期
时间:
2013-9-26 07:54
⊙﹏⊙b汗。。。
作者:
杨修
时间:
2013-9-26 09:37
楼主想刷帖???
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2