所以,与其说这是一个具体项目的问题,不如说是为了将来的理解。
我不明白子类构造函数应该是什么样子和包含什么内容。我理解父类将初始化它们的属性和其他类的对象,如果需要的话,但是当涉及到子类时,您是否初始化您想要通过super()
函数使用的父类属性以及它们自己的属性?
例如:
public class A{
private int num1;
private int num2;
public A (int num1, int num2){
this.num1 = num1;
this.num2 = num2;
}
}
class B extends A{
private int num3;
private int num4;
public B (int num1, int num2, int num3, int num4){
super(num1, num2);
this.num3 = num3;
this.num4 = num4;
}
}
class C extends A{
private int num5;
private int num6;
public C (int num1, int num2, int num5, int num6){
super(num1, num2);
this.num5 = num5;
this.num6 = num6;
}
}
(未运行代码…(我不认为,我是Java新手)
从我的理解,在两个子类我需要初始化父类属性,如果我想访问它们,然后使用整个get和set shebang,然后super。方法来使用它们。我感到困惑的是,这是正确的做法吗?这是完全错误的,还是我在某种程度上是正确的?
我认为这并不过分。如果在类A中为num1和num1添加get/set,并将它们设置为public
,则可以在继承它们时直接在子类上调用它们。例如
public class A {
// same as above, but add:
public int getNum1() {
return num1;
}
B b = new B(1,2,3,4);
int x = b.getNum1();
。
你的思路是对的,但是这个例子不是很好。
首先,在Java中,即使没有声明它,如果没有其他构造函数,你也会得到一个没有参数的默认构造函数。
因此,当您选择B extends A
时,构造函数将默认调用super();
,而不需要您手动编写它,只有当您想要指定一些参数时,因为父类。
然后,为了更好地理解继承和该领域的任何其他主题,试着给你的例子一些上下文或意义,比如Circle, Rectangle, Square,这是一个扩展Shape类。这对你将来有很大的帮助。
最后,你不能有一个没有父类的子类,但是你可以有一个没有子类的父类。记住这一点可以简化对继承的整体理解。
另一个可行的例子:
public class A {
private int num1;
private int num2;
public A () { // this will be called with super() method call from B's constructor
}
public A (int num1, int num2){
this.num1 = num1;
this.num2 = num2;
}
}
class B extends A {
private int num3;
private int num4;
public B (int num3, int num4){
// super(); // called by default, but you can write it
this.num3 = num3;
this.num4 = num4;
}
}