当前位置: 技术问答>java相关
一个基本问题:问什么编译不通过?
来源: 互联网 发布时间:2015-04-26
本文导语: 这是一道练习题,但是我无法编译通过。将TestB t= new TestB()改为TestA t= new TestA(),可以通过。请各位高手给个理由。 public class TestA{ TestA(){ System.out.println("P "); this.init(); } void init(){ System.out.println("Q "); ...
这是一道练习题,但是我无法编译通过。将TestB t= new TestB()改为TestA t= new TestA(),可以通过。请各位高手给个理由。
public class TestA{
TestA(){
System.out.println("P ");
this.init();
}
void init(){
System.out.println("Q ");
}
public static void main(String args[]){
TestB t= new TestB();
}
class TestB extends TestA{
int i=1;
TestB(){
super();
System.out.println(i+" ");
}
void init(){
System.out.println("C ");
this.i=2;
System.out.println(i+" ");
}
}
}
public class TestA{
TestA(){
System.out.println("P ");
this.init();
}
void init(){
System.out.println("Q ");
}
public static void main(String args[]){
TestB t= new TestB();
}
class TestB extends TestA{
int i=1;
TestB(){
super();
System.out.println(i+" ");
}
void init(){
System.out.println("C ");
this.i=2;
System.out.println(i+" ");
}
}
}
|
TestB是非静态的,是必须和单独的TestA实例关联在一起的,因此没有TestA的实例是不能初始化TestB的
将TestB声明为静态的就行了
将TestB声明为静态的就行了