接口与多重继承

原创 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,两者语法并不是一对一的关系,视实际需求还可以变化 一下。

iOS开发中关于继承、扩展和协议的理解

OC中protocol、category和继承的区别以前还是有点迷糊,面试的时候说的有点混乱,现在结合一些资料总结一下。 利用继承,多态是一个很好的保持“对扩展开放、对更改封闭”(OCP)的办法...
  • yuanyuan1314521
  • yuanyuan1314521
  • 2016年05月11日 10:40
  • 1089

JAVA 单继承 与 接口 多重继承

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

接口多重继承及注意事项

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

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

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

iOS 继承表

本人目前在研究web前端开发,买了一些视频,筛选出讲好的,自己在淘宝上出售:https://item.taobao.com/item.htm?id=540946716944(自己的淘宝店,请多多支持)...
  • u013682799
  • u013682799
  • 2014年08月05日 10:52
  • 369

python的多重继承

python和C++一样,支持多继承。概念虽然容易,但是困难的工作是如果子类调用一个自身没有定义的属性,它是按照何种顺序去到父类寻找呢,尤其是众多父类中有多个都包含该同名属性。 对经典类和新式类...
  • hxpjava1
  • hxpjava1
  • 2017年02月09日 08:52
  • 143

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

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

Java中类不能多重继承,接口可以多重继承

在java.util.concurrent.RunnableFuture.class  中 有个接口,如下: /* * @(#)RunnableFuture.java 1.3 06/01/30 ...
  • zhengqiqiqinqin
  • zhengqiqiqinqin
  • 2013年11月13日 22:31
  • 1110

(十)继承四(多继承)

(十)继承四(多继承) 2016 6 30 八、多继承重点内容 1、多继承:一个子类有两个或两个以上的父类2.多继承主要的三个常见问题: 1)不同的父类中有同名函数,如何区分?(二异性...
  • qq_34553422
  • qq_34553422
  • 2016年07月07日 15:56
  • 164

多继承与多重继承

什莫是多继承? 一个类拥有两个或者两个以上的父类 什莫是多重继承? 一个类不仅仅有父类还有祖父类 什莫是虚继承? 虚继承是为了解决多继承的问题.经过这样的声明后,当基类通过多条派生路径被一个派生类继承...
  • weng960920
  • weng960920
  • 2017年04月22日 17:35
  • 109
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:接口与多重继承
举报原因:
原因补充:

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