0

因此,与其说是针对特定项目的问题,不如说是对未来的理解。

我不明白子类构造函数的外观和包含的内容。我知道如果需要,父类将初始化它们的属性和其他类的对象,但是当涉及到子类时,您是否通过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。使用它们的方法。我感到困惑的是,这是正确的做法吗?这是完全错误的还是我在正确的轨道上?

4

2 回答 2

0

我认为这离题不远了。如果在 A 类中为 num1 和 num1 添加 get/set 并生成它们public,则可以在继承它们时直接在子类上调用它们。IE

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();

会工作。

于 2021-10-22T13:23:04.447 回答
-1

你走在正确的轨道上,但这个例子并不是那么好。

首先,在 Java 中,即使没有声明它并且如果没有其他构造函数,您将获得没有参数的默认构造函数。

因此,当您选择B extends A构造函数时,默认情况下将调用构造函数 super();,而无需您手动编写它,只有当您想要指定一些参数时,因为父类。

然后,为了更好地理解继承和该领域的任何其他主题,请尝试为您的示例提供一些上下文或含义,例如扩展 Shape 类的 Circle、Rectangle、Square。这对你以后有很大的帮助。

最后,你不能有一个没有父级的子类,但你可以有一个没有子级的父级。牢记这一点将有助于对继承的整体理解。

另一个可行的例子:

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;
  
  }
}
于 2021-10-22T13:30:09.140 回答