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

© 马胜平 中级黑马   /  2012-2-20 13:15  /  3042 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class A{
  2.                 public static void print(){
  3.               System.out.println("A");
  4.                 }
  5.                 public A(){
  6.                          System.out.prinln("A");
  7.                 }
  8. }
  9. public class B extends A{
  10.          public static void print(){
  11.                   System.out,.println("B");
  12.         }
  13.         public B(){
  14.                 System.out.println("B");
  15.         }
  16.         public static void main(String[] args){
  17.                 A a=new B();
  18.                 a=new A();
  19.         }
  20. }
复制代码
说出输出结果是什么,why?

评分

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

查看全部评分

7 个回复

倒序浏览
A
B
A

就一个知识点:当创建子类对象时,先调用父类的构造函数,再调用子类的构造函数

评分

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

查看全部评分

回复 使用道具 举报
同意上楼的。
回复 使用道具 举报
我认为打印的是
A
B
A
因为
A a = new B();        //首先会调用父类A中的构造函数打印A,然后调用子类B的构造函数打印B
a = new A();        //实际上是等同与 A a = new A();        //打印出来的是父类A的构造函数A

评分

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

查看全部评分

回复 使用道具 举报
关键知识点是:
  在子类构造函数的第一个语句,隐式地调用了父类的空参构造函数,,即有一个super();语句
然后你知道了
回复 使用道具 举报
这是用多态的应用,在主函数中A a=new B();这个语句中,先要调用A类中的构造函数,所以首先输出A,再调查用B类中的构造函数,所以再输出B,而a=new A();这个语句就是简单的建立一个A对象,所以调用A的构造函数,即输出A,所以最终打印结果为
A
B
A
回复 使用道具 举报
A
B   //A a=new B(); 先调用父类构造方法(隐式调用无参的),再调用子类构造方法
A   //a=new A();调用父类构造方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马