【发布时间】:2018-03-03 22:14:46
【问题描述】:
与从可以实现的普通超类继承有什么不同吗?
atm 我有一个名为abstractcar 的抽象类,我有bigcar / smallcar 扩展了这个abstract class。
public abstract class AbstractCar{
private int capacity;
}
class BigCar extends AbstractCar{}
class SmallCar extends AbstractCar{}
abstractcar 中的一个字段设置为“private int capacity”
但是在子类“smallcar”中,当我键入“容量”作为要在构造函数中使用的变量时,它说“容量在 abstractcar 中具有私有访问权限”
我以为:
字段始终是私有的,并且
子类继承父类的所有字段和方法?
我现在应该如何进行?
【问题讨论】:
-
字段是您设置的任何可见性。子类继承所有字段和方法,但这并不意味着它们可以访问它们。
-
1) 字段并不总是
private,您可以将它们设为protected或public(尽管最好使用访问器)。 2) 对。但他们无法访问private字段。 -
如果你想访问抽象类中的字段,它们应该受到保护。看看docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
-
但是如果子类继承了一个字段,即使它最初被标记为“私有”,该字段也是子类对象的一部分?您是说要让子类主动使用或修改超类/抽象类中的字段值,该字段变量必须至少设置为“受保护”?这背后的原因是什么??
-
从超类继承的私有字段是子类对象的一部分,但在子类中无法修改。你可以参考下面我的回答
标签: java class inheritance abstract