我应该在哪里创建一个构造函数,并且我不应该在哪里?
我在面向对象编程中的第一堂课。我应该在哪里创建一个构造函数,并且我不应该在哪里?
我应该为每个类创建一个构造方法吗?
例如
public class Cube2 {
int length;
int breadth;
int height;
public int getVolume() {
return (length * breadth * height);
}
Cube2() {
this(10, 10);
System.out.println("Finished with Default Constructor");
}
Cube2(int l, int b) {
this(l, b, 10);
System.out.println("Finished with Parameterized Constructor having 2 params");
}
Cube2(int l, int b, int h) {
length = l;
breadth = b;
height = h;
System.out.println("Finished with Parameterized Constructor having 3 params");
}
public static void main(String[] args) {
Cube2 cubeObj1, cubeObj2;
cubeObj1 = new Cube2();
cubeObj2 = new Cube2(10, 20, 30);
System.out.println("Volume of Cube1 is : " + cubeObj1.getVolume());
System.out.println("Volume of Cube2 is : " + cubeObj2.getVolume());
}
}
如果我想创建一个新的构造,我应该使用在前面(第一个)一个使用相同的参数
?
像构造Cube2(int l, int b, int h)
具有相同的为这一个Cube2(int l, int b)
除了变量(INT 1H)参数
有很多情况下,当一个构造函数是没有必要的,特别是如果你打算使用inversion of control,其中需要单个默认构造函数。
但是,对于你的立方体的例子,它会使sence两个提供一个或两个构造函数。默认构造函数,如果您觉得有必要在构造后操作多维数据集参数,和/或需要实际创建多维数据集所需的三个参数。
然而使用或者您的前两个构造方法不会使SENCE我在这种情况下,因为通常没有这样的东西作为sensible defaults
多维数据集initalizing的对象。 tcp
连接的值timeout
可能会有合理的默认值。
没有规则构造函数需要与另一个构造函数具有相同的参数。由于额外的构造函数通常只需要略有不同,这只是最终发生的事情。
任何没有为隐式定义构造函数的类都有一个没有参数的构造函数。但是,如果你需要,你必须声明一个无参数的构造函数,当你声明他人时。因此,除非您需要信息或逻辑来构建对象,否则不需要显式构造函数。
Constructor
必须在根据需要创建的。如果没有其他Constructor
被创建,则编译器总是提供默认的Constructor
。
不,只有在没有给出其他构造函数的情况下才会创建默认构造函数。 – 2011-02-25 19:24:12
每个类都至少有一个构造函数,不管它是否被明确定义。
如果你不不声明构造明确,一个是为YOUT定义:默认参数的构造函数—无操作—它调用父类的无参数构造函数(super()
)。
如果父类缺少无参数构造函数,即使它不执行任何操作,也需要声明构造函数—:如果父类只有带参数的构造函数,则必须显式调用父构造函数;因此,您需要为您的类定义至少一个构造函数。
如果类不会被公众实例化,您可能还想定义类的构造函数,使其可见性不是公共的(例如,private
)。有人认为,总是保持类的构造函数的可见性受到限制,并且只允许通过工厂方法进行公开实例化是一种很好的做法,消费者不应该关心实际的对象类型是什么,而只是它是所需类型的子类型。这提供了更多的灵活性。
不要忘记,一旦实例完全构建,类实例应该“准备好使用”。 “准备使用”的定义当然是一个相当可调的概念。
*每个类都至少有一个构造函数,无论它是否被明确定义。*这是重要的部分。所以不,你不必为每个类声明一个构造函数,因为默认提供了一个标准的构造函数。 – Bijan 2011-02-26 01:15:39
创建该类的用户将使用的构造函数。这实际上只是为用户设计API的更一般的想法的结果。尝试编写将首先使用你的类的代码,然后你会看到你需要什么方法。
如果您有一个方法与另一个方法相同,但添加了一个参数,则可以更容易地理解您是否一致地命名和排序其他参数。
你的第一个构造函数不是默认的构造函数。如果你不写任何东西,默认的构造函数就是你得到的 - 你不可能编写一个。你写的是一个无参数的构造函数。
这不是一个立方体,它是一个矩形棱镜,如果两侧可以有不同的长度。 – Omnifarious 2011-02-25 18:49:00