B2级运行时的输出是什么?

时间:2015-06-07 08:06:06

标签: java

public class P23 {
    P23() {
        print();
    }

    void print() {
        System.out.println("A");
    }
}

class B2 extends P23 {
    int i = 0; // Math.round(3.5f);

    public static void main(String[] args) {
        System.out.println("inside main");
        P23 a = new B2();
        a.print();
    }

    void print() {
        System.out.println(i);
    }
}

不打印任何东西! 我错过了什么? 请帮我理解如何调试这个。

2 个答案:

答案 0 :(得分:2)

如果这两个类都在同一个源文件中,您应该使用main方法将类设为公共类(即将class B2更改为public class B2并将public class P23更改为{ {1}})。如果它们不在同一个源文件中,您仍应将class P23公开。

修复后,以下行的输出为:

B2

在对System.out.println("inside main"); // prints 'inside main' P23 a = new B2(); // prints "0" since the constructor of B2 calls the constructor of P23 // which executes B2's print() a.print(); // prints "0" since B2's print() is executed 的两次调用中,调用子类B2的print方法,因为print的运行时类型为a

因此输出

B2

答案 1 :(得分:0)

public class P23
{
   P23() {  print();   }
   void print() { System.out.println("A"); }
   public static void main(String[] args)
   {
    System.out.println("inside main");
      P23 a = new B2();
      a.print();
   }

}
class B2 extends P23
{
   int i = 0;  //Math.round(3.5f);
   void print() 
   { 
      System.out.println(i);
   }
}