首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >继承、带有接口的组合

继承、带有接口的组合
EN

Stack Overflow用户
提问于 2015-10-08 06:27:47
回答 1查看 63关注 0票数 0

据我所知,可以同时存在类继承和接口继承。接口是提供封装的方式之一。

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

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

为了更好地理解,请用Java代码提供示例(如果可能)。

EN

回答 1

Stack Overflow用户

发布于 2015-10-08 06:34:04

Inheritance不会总是有weak encapsulation

引用了一篇很棒的JavaWorld文章

在继承关系中,超类通常被认为是“脆弱的”,因为对超类的一个小的更改可能会产生连锁反应,并需要在应用程序的代码中的许多其他地方进行更改。更具体地说,超类真正脆弱的是它的接口。如果超类设计良好,并以面向对象的方式将接口和实现完全分离,那么对超类实现的任何更改都不会产生任何影响。但是,对超类接口的更改可能会影响并破坏使用超类或其任何子类的任何代码。更重要的是,超类接口中的更改可能会破坏定义其任何子类的代码。

我肯定会阅读这篇文章,并浏览网站上各种不同的文章。一些Googling可能也会有所帮助:)

描述weak encapsulation的小示例

代码语言:javascript
复制
  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的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33003477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档