`
txf2004
  • 浏览: 6869738 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

接口与多重继承

阅读更多

在很多时候,常会听别人说,接口(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,两者语法并不是一对一的关系,视实际需求还可以变化 一下。

分享到:
评论
1 楼 mx122723 2010-09-28  
原来是转个弯实现的多重继承啊!

相关推荐

    C++编程思想--多重继承

    子对象重叠,虚基类,开销,向上映射,避免MI,修复接口

    详解java为什么不允许类多重继承却允许接口多重继承

    主要介绍了java为什么不允许类多重继承却允许接口多重继承,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    c++多重继承

    类的多重继承演示"<<endl; CDateTimeType dt 1 1 2008 11 12 12 ; 直接使用DateTimeType构造函数设置日期时间 cout<<"调用CDateTimeType类构造函数设定的初始日期 时间为:"<<...

    Java编程思想之接口Java中实现多重继承.doc

    Java编程思想之接口Java中实现多重继承

    C++- 抽象类(存虚函数)、接口、多重继承1

    这是因为Derived d对象地址里依次存了两个不同的父类成员变量值,如下图所示: 从上图看到,其实pa和pb还是位于d对象地址里,只是指向的位置不同而已.所以

    Java开发技术大全 电子版

    4.12接口与多重继承174 4.12.1接口的定义174 4.12.2接口的继承175 4.12.3接口的实现177 4.13内部类179 4.13.1内部类的定义179 4.13.2内部类访问外部类的成员182 4.13.3内部类之间的相互使用185 4.13.4在外部...

    java包与接口实验报告

    包与接口实验报告 实验 包与接口 【实验目的】 1. 了解Java 中包(package)、接口(interface)的作用。...接口解决了Java 不支持多重继承的问题,可以通过实现多个接口达到与多重继承相同的功能。

    java程序设计与开发课件

    3.6.2 接口与多重继承··························· (63) 3.6.3 接口的实现····························· (64) 3.6.4 接口中的变量和方法········...

    Java基础教程之接口的继承与抽象类

    主要介绍了Java基础教程之接口的继承与抽象类,本文介绍了接口继承、接口的多重继承以及抽象类的知识,需要的朋友可以参考下

    java简答题

    4-2 方法的重载与方法的覆盖分别代表什么含义? 方法的重载:在同一个类中定义多个同名...JAVA中不支持多重继承,而是通过接口实现比多重继承更强的功能,Java通过接口使处于不同层次甚至不相关的类可以有相同的行为。

    工厂模式与面向接口配合实现深度解耦

    它们只支持单一的继承,或者多级继承,这一变化最大的影响,我觉得是大大的降低了编程的难度,因为没有了C++的多级多脉继承,所以接口出现了,它支持多重继承,当然它的主要目的是为了实现解耦,将定义与实现分离。...

    接口基础知识

    Java通过实现接口达到了多重继承的效果 3. 接口表示一种约定,接口表示一种能力。接口体现了约定和实现分离的原则。 4. 抽象类利于代码复用,接口利于代码维护。 5. 通过面向接口编程,可以降低代码将的耦合性,提高...

    关于C++中菱形继承和虚继承的问题总结

    菱形继承是多重继承中跑不掉的,Java拿掉了多重继承,辅之以接口。C++中虽然没有明确说明接口这种东西,但是只有纯虚函数的类可以看作Java中的接口。在多重继承中建议使用“接口”,来避免多重继承中可能出现的各种...

    .net接口,工厂模式开发

    这个实例用了多重接口 继承 工厂模式 这个实例用了多重接口 继承 工厂模式 这个实例用了多重接口 继承 工厂模式 这个实例用了多重接口 继承 工厂模式

    JAVA细节知识

    java 类 对象引用 对象 ...还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.

    JAVA 接口用法 PPT

    详细介绍JAVA 接口用法,并详解与抽象类区别.还介绍多重继承.

    iOS 面试题

    可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。 2.#import 跟#include 又什么...

    C#接口抽象类区别实例

    (3) 接口可以被多重实现,抽象类只能被单一继承 (4) 抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中 (5) 抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物...

    第01章-Java语言概述-2010-2011(2)

    Java不允许多重继承,多重继承必须通过接口实现。 Java引进了abstract 和final修饰词。 带abstract的类称为抽象类,只能作为父类使用, 不能直接产生实例对象。 带final的类不能用作父类被继承, 带final的...

    Java中抽象类和接口的区别与作用详解

    Interface可以实现Java的多重继承,而abstract class不能。abstract class和Interface中都可以没有抽象方法,当然,此刻,abstract class和Interface,也就失 去了abstract的抽象意义。 通常我们所讲的abstract ...

Global site tag (gtag.js) - Google Analytics