【问题标题】:Multiple Inheritance via Composition通过组合实现多重继承
【发布时间】:2019-03-21 06:29:30
【问题描述】:

今天在一次采访中,有人问我是否可以在 JAVA 中进行多重继承,我说可以通过实现多个接口来实现,但不完全是,她回答是的,可以通过作品... 我不确定这是否正确。如果是,那具体怎么解释,如果可能的话,用代码sn-ps...?

【问题讨论】:

  • SO 题外话,但如果面试官将组合等同于多重继承,那么你可能不想在那里工作。
  • 为了强调@AndrewS 的评论,有一个称为composition over inheritance 的概念。在像 Java 这样的强类型语言中,组合和继承是不同的,因为如果类具有 C 类型的 ha 成员(即利用组合),则类不是 C 类型。你的回答是。接口并不完全正确,但与 Java 中的多继承一样接近(至少目前如此)。
  • @AndrewS 你能解释一下这是怎么跑题的吗?
  • 离题,因为它不是关于特定的编程问题。有关详细信息,请参阅help center。 (我没有投反对票。)
  • @AndrewS 这个问题显然是关于编程的(不一定是关于特定的代码 sn-ps,是吗?),而且非常清楚。

标签: java multiple-inheritance composition


【解决方案1】:

Java 不支持类的多重继承,它只能对接口支持。

组合是一种通过以下方式从您的类中访问外部类的某些方法/字段的方法:

//This is a pseudo-code. Don't compile!
class YourClass{
    private ExternalClass obj;
    private AnotherExternalClass obj1;

    //initialize obj, obj1 in constructor

    public String getName(){
        return obj.getName();
    }

    public String getTitle(){
        return obj1.getTitle();
    }
}

class ExternalClass{

    private String Name;

    //constructor to initialize Name ...

    public String getName(){
        return this.Name;
    }
}

class AnotherExternalClass{

    private String Title;

    //constructor to initialize Title ...

    public String getTitle(){
        return this.Title;
    }
}

通过这种编码组合风格,YourClass 现在可以访问 ExternalClass 的 getName 方法,面试官可能将其称为某种“继承”

【讨论】:

  • 但是我相信上面的代码 sn-p 仍然没有在 JAVA 中显示多重继承对...?
  • @AkashAgarwal,是的,它没有:) ...对于“多重继承”,您可以存储另一个字段(比如 obj1),它指向不同的类类型并实现其方法.. . 我对我的答案进行了编辑......看看它是否有帮助
猜你喜欢
  • 2011-10-07
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多