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);
}
}