A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lizhangzhi 中级黑马   /  2013-9-25 20:07  /  1412 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Outer {
  2.         String string="Outer string";
  3.         public void printing(){
  4.                 System.out.println("Outer");
  5.         }
  6. }
  7. class inner extends Outer{
  8.          String string="inner string";
  9.      public void printing(){
  10.              System.out.println("inner");
  11.      }
  12. }
  13. public class Test2 {
  14.    
  15.         /**
  16.          * @param args
  17.          */
  18.         public static void main(String[] args) {
  19.                 // TODO Auto-generated method stub
  20.           Outer i=new inner();
  21.         (( Outer) i).printing();
  22.            System.out.println(((Outer)i).string);
  23.         }

  24. }
复制代码

点评

神马问题啊?给点文字描述啊  发表于 2013-9-25 20:22

8 个回复

倒序浏览
问题是?
回复 使用道具 举报
假如你的问题是问为什么两次的打印结果不一样的话,我就说说吧。
根据Java的多态机制,父类引用指向子类对象的时候,它访问的方法是子类中的方法。所以打印的是子类中的属性。而访问引用中的属性的话,它还是指向本类的属性。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
你是想问结果为什么是
  1. inner
  2. Outer string
复制代码
的吧。
其实也很简单,就是多态的表现吧,这里Outer i=new inner();就是多态的一个运用,多态实现的三个条件
1.有继承 2.有覆盖 3父类引用指向子类对象  很显然你的代码都满足。那么结果也是显而易见的
首先输出inner 是因为你在inner类里对Outer类的方法printing进行了重写(也就是覆盖),所以调用printing方法时就会调用inner类的printing方法。
第二个输出Outer string 是因为你的引用是Outer类的,(Outer)i).string 父类对象是看不到子类特有的东西的,所以访问的也还是父类的属性。
希望能帮到你。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
同意楼上的说法, 还有 就此问题中 主方法中不必转型
回复 使用道具 举报
你们好厉害啊,楼主没问,你们都能答上啊!{:soso_e179:}
回复 使用道具 举报
⊙﹏⊙b汗。。。
回复 使用道具 举报
杨修 中级黑马 2013-9-26 09:37:28
8#
楼主想刷帖???
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马