2011-05-11 33 views
5

我在想,如果我有X个不同构造一个抽象的超类的,我希望能够使用所有这些构造函数在子类中,做我必须写在子类所有X构造函数和让他们都叫超级(...)?好像冗余代码..传递建设超类

一个例子清晰度:

public class SuperClass { 
public SuperClass() { 
... 
} 
public SuperClass(double d) { 
... 
} 
public SuperClass(BigDecimal b) { 
... 
} 
public SuperClass(BigDecimal b, String s) { 
... 
} 
[...] 
} 

我是否需要比:

public class SuperClass { 
public SubClass() { 
super(); 
} 
public SubClass(double d) { 
super(d); 
} 
public SubClass(BigDecimal b) { 
super(b); 
} 
public SuperClass(BigDecimal b, String s) { 
super(b, s); 
} 
[...] 
} 

回答

5

但你必须这样做,这样一来。这样你就可以决定你想在子类中公开什么。另外一些构造函数可能不适用于子类,因此如果没有明确地编写它,默认情况下不起作用。

2

您不需要为每个基本构造函数的重载提供构造函数。你只需要一个。如果你的基构造函数提供了一个默认的(无参数)构造函数,那么你甚至不需要自己提供一个构造函数。编译器会自动为您的类生成一个默认构造函数,该构造函数会自动调用基类的默认构造函数。

注:没有必要直接调用super(),因为它是不带参数的暗示。它仅在没有默认构造函数时才需要。

看到许多不同的构造函数以及你不需要它们的事实可能意味着父类太多了。

1

你可以有这样的代码:

public class SuperClass { 
public SuperClass() { 
... 
} 
public SuperClass(double d) { 
... 
} 
public SuperClass(BigDecimal b) { 

} 
public SuperClass(BigDecimal b, String s) { 
this(b); 
} 
[...] 
} 

而且具有作为子类:

public class SubClass extends SuperClass{ 
public SubClass() { 
super(); 
} 
public SubClass(double d) { 
super(d); 
} 

public SuperClass(BigDecimal b, String s) { 
super(b, s); 
} 
[...] 
} 
1

如果你想在这两个parenr和孩子每一种类型的构造函数,那么,你需要明确指定它们,但不需要明确地调用super()