据我所知,可以同时存在类继承和接口继承。接口是提供封装的方式之一。
Q1:那么为什么“继承总是有弱封装”呢?
Q2:带有接口的组合被认为是一个很好的设计工具。如何以及为什么?
为了更好地理解,请用Java代码提供示例(如果可能)。
发布于 2015-10-08 06:34:04
Inheritance不会总是有weak encapsulation。
引用了一篇很棒的JavaWorld文章
在继承关系中,超类通常被认为是“脆弱的”,因为对超类的一个小的更改可能会产生连锁反应,并需要在应用程序的代码中的许多其他地方进行更改。更具体地说,超类真正脆弱的是它的接口。如果超类设计良好,并以面向对象的方式将接口和实现完全分离,那么对超类实现的任何更改都不会产生任何影响。但是,对超类接口的更改可能会影响并破坏使用超类或其任何子类的任何代码。更重要的是,超类接口中的更改可能会破坏定义其任何子类的代码。
我肯定会阅读这篇文章,并浏览网站上各种不同的文章。一些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,后者会在base类中调用bar,但事实证明,这是一个infinite recursion。
如果使用得当,它是一个相当强大的工具。例如,如果为implementing interface,则需要在derived class中实现来自base class的所有方法。如果你知道有默认行为的方法,使用Inheritance,它不需要实现所有的方法,只需要实现那些你需要override的方法。
https://stackoverflow.com/questions/33003477
复制相似问题