| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 237 人关注过本帖
标题:子类、父类问题
只看楼主 加入收藏
红柚
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:4
帖 子:19
专家分:92
注 册:2018-4-20
结帖率:100%
  已结贴   问题点数:20  回复次数:4   
子类、父类问题
class A {
   public void print() {
      System.out.println("A");
   }
}
class B extends A {
   public void print() {
      System.out.println("B");
   }
   public static void main(String[ ] args) {
    A object = new B();
    B b = (B) object;
    b.print();
   }
}

问题是:main中,只有new A(); 然后输出结果才会是A,其他我试了下都是B。
能够给我讲解下这个过程么,我没怎么理解。
不是子类会被upcasting到父类么。
2018-09-08 10:23
幻紫灵心
Rank: 5Rank: 5
来 自:山咔咔里面
等 级:职业侠客
威 望:4
帖 子:58
专家分:301
注 册:2018-3-30
  得分:5 
你的 B 里面都已经把print()重写了,调用b.print();自然是重写后的。
2018-09-08 13:43
红柚
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:4
帖 子:19
专家分:92
注 册:2018-4-20
  得分:0 
回复 2楼 幻紫灵心
请问,意思就是子类将方法重写后,就算将这个子类提升为父类,调用也是重写后的方法对么。
2018-09-08 13:58
幻紫灵心
Rank: 5Rank: 5
来 自:山咔咔里面
等 级:职业侠客
威 望:4
帖 子:58
专家分:301
注 册:2018-3-30
  得分:15 
程序代码:
public class Ex {
    public static void main(String[] args) {
        A object = new B();
        object.print();//显示 B
        B b = (B) object;
        b.print();//显示 B
    }
}
class A {
   public void print() {
      System.out.println("A");
   }
}
class B extends A {
   public void print() {
      System.out.println("B");
   }
}

我觉得你可能想问我这个object.print(); object是A的对象,但是打印出来的是 B 。
这是java的动态绑定,有继承,有重写,则父类引用指向子类对象。new 的是谁就指向谁。
2018-09-08 13:58
红柚
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:4
帖 子:19
专家分:92
注 册:2018-4-20
  得分:0 
回复 4楼 幻紫灵心
啊啊啊,谢谢
2018-09-08 14:01







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035808 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved