根据我的理解,可以有类继承和接口继承。接口是提供封装的方法之一。
Q1:那么为什么“继承总是会有弱封装”?
Q2:具有界面的合成被认为是一个很好的设计工具。怎么样和为什么?
请提供Java代码示例(如果可能)以便更好地理解。
答案 0 :(得分:0)
Inheritance
并不总是weak encapsulation
。
引用令人敬畏的JavaWorld文章
在继承关系中,通常会说超类 #&34;脆弱,"因为对超类的一点改动可能会迸发出来 并要求在应用程序代码中的许多其他地方进行更改。至 更具体地说,超类的实际上是脆弱的 接口。如果超类是精心设计的,那就是干净的分离 任何面向对象样式的接口和实现 对超类的实现的改变根本不应该涟漪。 但是,对超类界面的更改可能会出现问题 破坏使用超类或其任何子类的任何代码。 而且,超类接口的更改可能会破坏代码 它定义了它的任何子类。
我肯定会阅读这篇文章并浏览网站以获取各种不同的文章。有些Googling
也可能会有所帮助:)
描述weak encapsulation
的小例子:
class Base {
public void foo() {
bar();
}
public void bar() {}
}
class Derived extends Base {
@Override
public void bar() {
foo();
}
}
public static void main(String[] args) {
new Child().bar();
}
似乎overridden bar
会调用foo
来调用bar
课程中的base
但事实证明,这是infinite recursion
。
如果使用得当,这是一个相当强大的工具。例如,如果implementing interface
,则需要在base class
中实施derived class
中的所有方法。如果您知道存在默认行为的方法,请使用Inheritance
并不要求实施所有方法,只需要override
所需的方法。