2014-10-27 96 views
0

我尝试在子类的主要方法中创建父实例。它显示错误:“类A中的构造函数A不能应用于给定的类型”。请告诉我为什么我的代码不起作用。由于从子类的主要方法创建父实例

class A 
{ 
    protected int a; 
    A(int a) { 
     this.a = a; 
    } 
} 

class Test extends A 
{ 
    public static void main(String[] args) { 
     int a = 10; 
     A instance = new A(a); 
    } 
} 

回答

1

的问题是不是线

A instance = new A(a); 

的问题是,你还没有定义的测试任何构造函数,编译器应该提供以下形式之一:

Test() { 
    super(); 
} 

但它不能因为超类(A)没有任何默认的构造函数。所以,你需要explivitely提供一个构造函数:

Test() { 
    super(0); 
} 

Test(int i) { 
    super(i); 
} 

例如。

0

你的行没有错A instance = new A(a);这不是你的编译错误来自的地方。

在A类已经定义了一个构造A(int a)其防止默认(无参数)构造被自动生成。

你得到编译错误的原因是你用class Test extends A扩展A而不是调用你的超类的构造函数。它正在寻找一个默认构造函数为A级。