【发布时间】:2016-01-05 08:22:21
【问题描述】:
根据我的理解,可以有类继承和接口继承。而接口是提供封装的方式之一。
Q1:那为什么“继承总是有弱封装”?
Q2:有界面的组合被认为是一个很好的设计工具。如何以及为什么?
请提供 Java 代码示例(如果可能)以便更好地理解。
【问题讨论】:
标签: oop inheritance interface composition
根据我的理解,可以有类继承和接口继承。而接口是提供封装的方式之一。
Q1:那为什么“继承总是有弱封装”?
Q2:有界面的组合被认为是一个很好的设计工具。如何以及为什么?
请提供 Java 代码示例(如果可能)以便更好地理解。
【问题讨论】:
标签: oop inheritance interface composition
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,而bar 会在base 类中调用,但事实证明,这是一个infinite recursion。
如果使用得当,它是一个相当强大的工具。例如implementing interface,则需要实现derived class中来自base class的所有方法。如果您知道有些方法具有默认行为,请使用 Inheritance,它不需要实现所有方法,而只需要实现您需要的方法 override。
【讨论】: