接口与多重继承

原创 2006年05月31日 19:08:00

在很多时候,常会听别人说,接口(interface)可以达到多重继承的效果,这是怎么回事?

其实要讨论这个问题,首先您对于C++中多重继承要先有认识,新手看了书说接口可以达到多重继承,切莫人云亦云,尤其是没有学过C++的新手们,如果您对于C++多重继承想要有所认识,请先看看 多重继承(一) 多重继承(二)

 


Java不能多重继承,但为何说Java中可以使用接口(interface)来达到多重继承的效果,首先效果之一,就如 多重继承(二) 中描述的「多重继承时通常其中一个基底类别作为private实作体,而其它的用以表现完全的抽象接口。」,在Java中这个效果可以使用接口来达到,接口此时所扮演的即 多重继承(二)中的抽象类别,一个完全的抽象接口,这个效果的达成方式,如 接口(interface型态 中所介绍的,您可以直接对应这两个主题中的程序实作来了解,了解Java中如何使用接口(interface)型态来达到C++中所谓多重继承的「一种」效果。

 

来看看另一个情况。

 

如果有SomeClass类别与OtherClass类别,您想要SomeAndOther类别可以同时拥有SomeClass类别与 OtherClass类别中已定义好的操作,并可以进行多型操作,在C++中可以用多重继承来达到,但在Java中显然的无法使用多重继承,怎么办?您可以在设计上先绕个弯,先使用两个接口分别定义好SomeClassOtherClass两个类别的公开方法,例如:

  • ISome.java
public interface ISome {
    public void doSome();
}
  • IOther.java
public interface IOther {
    public void doOther();
}


接着让SomeOther类别分别实作两个接口:

  • Some.java
public class Some implements ISome {
    public void doSome() {
        ....
    }
}
  • Other.java
public class Other implements IOther {
    public void doOther() {
        ....
    }
}

SomeAndOther如何同时拥有两个SomeOther类别已定义好的操作?并可以多型操作?SomeAndOther可以 继承其中之一,并拥有其中之一,例如:

  • SomeAndOther.java
public class SomeAndOther extends Some implements IOther {
    private IOther other = new Other();

    public void doOther() {
        other.doOther();
    }
}

虽不满意,但至少解决了目前的问题,当然这边只是其中一例,毕竟C++C++JavaJava,两者语法并不是一对一的关系,视实际需求还可以变化 一下。

C#接口浅谈(多重继承)

接口是啥? 简单来说就是一种约定,也是C#里面非常重要的. 我们知道在C#中一个派生类(子类)只能由一个父类,那要继承多种状态的时候怎么办呢,这个时候接口来了。 1.接口是一种约定 2.接口是抽...

接口多重继承及注意事项

又是一个牛角尖,只是语言不够严谨而已,Java中只支持类的单继承,接口之间的继承同样也是使用extends关键字,但是接口之间是支持多继承的,如下面的例子: interface IP1 { ...

关于Java使用接口实现多重继承

       首先在我们使用接口可以实现Java的多重继承,这里为什么Java自身不提供多重继承的机制呢?       这里有一种被称为菱形继承的危险:如图,我们有一个动物基类,本身带有一个叫声的方法...

JAVA 单继承 与 接口 多重继承

又是一个牛角尖,只是语言不够严谨而已,Java中只支持类的单继承,接口之间的继承同样也是使用extends关键字,但是接口之间是支持多继承的,如下面的例子: [java] view pl...

经典问题解析(3)---多态与数组、多重继承、接口的概念

经典问题解析(3)---多态与数组、多重继承、接口的概念

《Java编程思想》之接口(Java中实现多重继承?!)

1、interface不仅仅只是一个极度抽象的类,因为它允许人们通过创建一个能够被向上转型为多种基类型的类,来实现某种类似C++多重继承变种的特性。 2、像类一样,可以在interface关键字前面...

Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?

http://www.cnblogs.com/fkdd/archive/2012/03/14/2396284.html 题目:1.Object-c的类可以多重继承么?可以实现多个接口么?Ca...

54-多重继承(下)单继承多接口

1、多重继承问题三 Derived继承BaseA和BaseB,如果AB中都含有1个虚函数,那么Derived就会叠加产生2个虚函数表指针指向这两个虚函数表#include #include usi...

Java8引入函数接口,与原有接口多重继承带来的缺陷——走进Java Lambda(三)

我们知道函数接口可以有default方法和静态方法。我们知道静态方法不属于任何一个类,这里不会有什么问题。但是接口里面有default方法,加上接口可以多继承,这样问题就来了。不信,我们走着瞧。 跳一...
  • lsmsrc
  • lsmsrc
  • 2014年12月05日 13:41
  • 2065

C++习题 多重继承

  • 2016年07月07日 12:59
  • 5KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:接口与多重继承
举报原因:
原因补充:

(最多只允许输入30个字)