2013-11-04 137 views
-2

我想知道是否有可能用Class来扩展另一个类,如果可以的话。 ?:使用扩展类的构造函数

public class HelloWorld { 
    public HelloWorld() { 
     A aClass = new A(22); 
    } 
} 

public class A extends B { 
    public A() { 
     System.out.println(number); 
    } 
} 

public class B { 
    public int number; 

    public B(int number) { 
     this.number = number; 
    } 
} 
+0

你试过了吗? – manix

+0

问题在哪里? –

+0

由于'A'必须调用接收'int'参数的'B'类的构造函数,所以不会编译。 –

回答

2

A构造需要怎样链使用super一个B构造。目前B中唯一的构造函数需要参数int,因此您需要指定一个参数,例如

public A(int x) { 
    super(x); // Calls the B(number) constructor 
    System.out.println(number); 
} 

请注意,我添加x参数为A,因为你调用它HelloWorld的方式。你不必拥有相同的参数。例如:

public A() { 
    super(10); 
    System.out.println(number); // Will print 10 
} 

然后与调用它:

A a = new A(); 

子类的构造或者链另一个构造(使用this),或在超类构造函数(使用super同一类内或隐式地)作为构造函数体中的第一条语句。如果链接是隐含的,则它总是等同于指定​​,即调用无参数超类构造函数。

有关更多详细信息,请参见section 8.8.7 of the JLS

+0

我不认为我的问题是正确的。这是一个很好的方式,你描述,但我真正想要的是没有调用实际的A构造函数,但只有B构造函数,通过使用答:这就是延伸的全部意义。 –

+0

@KevinJensenPetersen:你不能那样做。要构造一个'A'的实例,你可以*调用一个'A'构造函数...并且你不会从一个类继承构造函数签名到一个子类。 –

+0

我明白了..谢谢无论如何,你的答案仍然帮助我,并且可能是我会这样做的方式.. –

相关问题