gpt4 book ai didi

java - 从抽象类继承

转载 作者:行者123 更新时间:2023-12-02 11:33:55 25 4
gpt4 key购买 nike

它与从可实现的普通父类(super class)继承有什么不同吗?

atm 我有一个名为 abstractcar 的抽象类,并且我有 bigcar/smallcar 扩展了这个抽象类

public abstract class AbstractCar{
private int capacity;
}

class BigCar extends AbstractCar{}

class SmallCar extends AbstractCar{}

abstractcar 中的一个字段被设置为“私有(private) int 容量”

但是在子类“smallcar”中,当我输入“capacity”作为要在构造函数中使用的变量时,它会显示“capacity在abstractcar中具有私有(private)访问权限”

我认为:

  1. 字段始终是私有(private)的,

  2. 子类继承父类的所有字段和方法?

我现在应该如何进行?

最佳答案

实例方法和字段由 super 类的派生类继承,但这并不意味着它们也可访问

super 类中标记为 private 且由 sub 类继承的字段是 sub< 对象的一部分 类,但无法在 sub 类中进行修改

[不推荐的解决方案]

实例字段应始终声明为“私有(private)”。不这样做是一种不好的做法。但为了理解观点,我提出以下 3 点,然后是推荐方式。

您需要将该字段声明为非私有(private)字段,以便子类可以访问它。

  1. 您可以将父类(super class)中的字段声明为 protected 。 protected 字段可以在子类中访问。
  2. 如果子类和父类(super class)共享相同的包,则不能应用任何修饰符(默认包级别)。它将使得子类可以访问该字段。
  3. 您可以将该字段声明为公共(public)字段。在这种情况下,每个类都可以访问该字段。

[推荐解决方案]

添加一种在父类(super class)中设置字段的方法。如果该字段是对象生命的一部分(基本字段),那么您可以在 Super 类中创建一个构造函数,否则您可以拥有 setter 方法并可以调用它们。

public abstract class AbstractCar{
private int capacity;
public AbstractCar(int capacity) {
this.capacity = capacity;
}
}

class BigCar extends AbstractCar{

public BigCar() {
super(6);
}
}

class SmallCar extends AbstractCar{
public SmallCar() {
super(4);
}
}

您还可以定义 setter 方法并可以使用 protected 修饰符。您可以调用这些setter方法来设置父类(super class)中的字段。

关于java - 从抽象类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49089791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com