【问题标题】:Inheritance, composition with interface继承、组合与接口
【发布时间】:2016-01-05 08:22:21
【问题描述】:

根据我的理解,可以有类继承和接口继承。而接口是提供封装的方式之一。

Q1:那为什么“继承总是有弱封装”?

Q2:有界面的组合被认为是一个很好的设计工具。如何以及为什么?

请提供 Java 代码示例(如果可能)以便更好地理解。

【问题讨论】:

    标签: oop inheritance interface composition


    【解决方案1】:

    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

    【讨论】:

    • @sam2090- 感谢您的回答。尽管“如果您知道有些方法具有默认行为,请使用不需要实现所有方法而只需要实现那些您需要覆盖的方法的继承”对我来说并不清楚。
    • @summit 检查here。它一定会帮助你
    猜你喜欢
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2015-03-07
    相关资源
    最近更新 更多