Java 运行B2类时,输出是什么?

Java 运行B2类时,输出是什么?,java,Java,没有打印任何东西! 我错过了什么? 请帮助我了解如何调试这个类。如果这两个类都在同一个源文件中,您应该将使用main方法的类设置为公共类(即将类B2更改为公共类B2并将公共类P23更改为类P23)。如果它们不在同一源文件中,则仍应将B2公开 修复后,以下行的输出将为: public class P23 { P23() { print(); } void print() { System.out.println("A"); } }

没有打印任何东西! 我错过了什么?
请帮助我了解如何调试这个类。

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

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

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);
    }
}
在对
print
的两个调用中,调用子类B2的
print
方法,因为
a
的运行时类型是
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

谢谢@Eran,这回答了我很多问题!这不是答案。事实上,(原始)程序显示了一些输出。这应该是一条评论。@Turing85已编辑。我最初回答了为什么没有输出。现在我添加了对输出的解释。B2中的short print覆盖了P23中的print,但由于公共类需要有一个主类(原始代码中没有主类),因此B2中的代码永远无法访问。我猜它(ori.code)不会从命令行运行。@SubhamDalmia公共类不需要main方法,但是如果您想执行某些ClassX的main方法(例如,通过从命令行运行
java ClassX
),ClassX必须是公共的。不打印任何内容!我无法重现这种行为。我得到输出:
在main\n 0\n 0
中。在Eran的建议之后,我在Windows7.0下使用OracleJDK1.8.045。我认为上面的代码应该与原始代码一起使用。
inside main
0
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);
   }
}