例如,
public class Folder {
// ...
private List<Subfolder> subfolders;
}
和
public class Subfolder extends Folder {
// ...
}
如果我理解正确,Subfolder
将继承Folder
超类的所有字段,包括其List<Subfolder>
。但是,因为该列表对Folder
是私有的,并且只要我没有为列表编写任何访问器或mutator方法,我可以放心,Subfolder
将无法执行任何操作使用Folder
的子文件夹列表。我感到矛盾的是这是否被认为是好的设计。如果Subfolder
无法访问Folder
的子文件夹列表,为什么要继承它?
答案 0 :(得分:1)
子类从其父级继承非私有字段。你所拥有的是一个糟糕的设计,因为父类不应该知道他们的子类。
你有一个很高的耦合,这是不好的,因为你正在使文件夹依赖于它的孩子。
答案 1 :(得分:1)
一种可能性是abstract
Folder
,它可能会将其未实现的行为委托给SubFolder
个实例。我请参阅并要求SubFolder
必须是Folder
与编译Folder
相对的实例。
不继承private
字段,因为该字段不可直接访问(它是封装的)。可变性通常需要线程之间的同步(或类似Copy-On-Write)。无论如何,维基百科说encapsulation 用于隐藏类中结构化数据对象的值或状态,防止未授权方直接访问它们 。 / p>
答案 2 :(得分:0)
否,因为OOP遵循严格的层次结构。来自this,
这样想,所有的狗都是动物,但不是所有的动物都是 小狗。所有的狗都会吠叫,但不是所有的动物都会吠叫。
你不能让超类调用子类方法,因为超类 不 从子类继承任何东西。