`
jaywee
  • 浏览: 41711 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JAVA多重继承思考

    博客分类:
  • JAVA
阅读更多

先贴一段代码(<JAVA编程思想>(中文版)第179页):

interface CanFight {
  void fight();
}

interface CanSwim {
  void swim();
}

interface CanFly {
  void fly();
}

interface CanClimb{
	void climb();
}

class ActionCharacter {
  public void fight() {}
}

class Hero extends ActionCharacter
    implements CanFight, CanSwim, CanFly, CanClimb {
  public void swim() {}
  public void fly() {}
  public void climb() {}
}

public class Adventure {
//代理
  public static void t(CanFight x) { x.fight(); }
  public static void u(CanSwim x) { x.swim(); }
  public static void v(CanFly x) { x.fly(); }
  public static void w(ActionCharacter x) { x.fight(); }
  public static void c(CanClimb x){ x.climb(); }
  public static void main(String[] args) {
    Hero h = new Hero();
    t(h); // Treat it as a CanFight
    u(h); // Treat it as a CanSwim
    v(h); // Treat it as a CanFly
    w(h); // Treat it as an ActionCharacter
    c(h);
  }
} 

 Hero类组合了基类ActionCharacter和接口CanFlight,CanSwim和CanFly,当通过这种方式将一个具体类和多个接口组合到一起时,具体类必须在前,接口在后(否则会报错).

CanFight接口与ActionCharacter的fight()方法特征签名一样,这样,Hero中就没有必要再提供fight()的定义了,因为这个定义会在编译的初期随着调用ActionCharacter基类而定义好.

这也提示了子类遵循某个接口或继承某个基类的不同之处.用通俗的话可以这样说:

接口是告诉这个类,我有的东西,你必须得有.(即接口有的方法定义,在子类定义时必须都重新定义一遍)

基类是告诉这个子类,我有的东西,你可以拿去用.(即基类有的方法定义,子类可以直接继承下去而不必重新定义)

 

接口的继承又会是另一种情形,它类似于类的继承.

nterface Sleep
{
	void haveSleep();
}

interface Rest extends Sleep//接口的继承也是用extends关键字
{
	//void haveSleep();//这些都是没 有必要的.
	void haveRest();
}
interface Nap extends Sleep
{
	//void haveSleep();
	void haveNap();
}

interface nod extends Rest, Nap
{
	//void haveSleep();
	//void haveRest();
	//void haveNap();
	void haveNod();
}
 
分享到:
评论
2 楼 jaywee 2008-11-02  
风花雪月饼 写道

建议不要再拿接口来忽悠出什么多重继承了。
原本初学的时候就是这些地方搞不明白,被这一忽悠更不明白了。

内容错误:
CanFight接口与ActionCharacter的fight()方法特征签名一样,这样,Hero中就没有必要再提供fight()的定义了

Java代码 class&nbsp;ActionCharacter&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;act()&nbsp;{}&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;class ActionCharacter { 
   public void act() {} 
}


ActionCharacter并未提供fight()方法。所以你的说明是错误的。
将act()改为fight才符合你说的。
Java代码 class&nbsp;ActionCharacter&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;fight()&nbsp;{}&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;class ActionCharacter { 
   public void fight() {} 
}


发布前请先验证。

如果你是对书上抄的,难怪有人说需要有一定经验才能看懂。
中文描述也太不清楚了。

呵呵.不好意思..我其实 是看thinking in java看到这里想到了这些,所以找个地方把想到的东西备份一下..以后好回过头来看.属于很私人的行为.没有想过要拿出来教导别人的..呵
说实话,我对接口这章也不太懂...
另外,你看东西好仔细,那是我后来为了测试改的代码,现在已经改回来了..谢谢了...
1 楼 风花雪月饼 2008-11-02  
建议不要再拿接口来忽悠出什么多重继承了。
原本初学的时候就是这些地方搞不明白,被这一忽悠更不明白了。

内容错误:
CanFight接口与ActionCharacter的fight()方法特征签名一样,这样,Hero中就没有必要再提供fight()的定义了

class ActionCharacter {  
   public void act() {}  
} 


ActionCharacter并未提供fight()方法。所以你的说明是错误的。
将act()改为fight才符合你说的。
class ActionCharacter {  
   public void fight() {}  
} 


发布前请先验证。

如果你是对书上抄的,难怪有人说需要有一定经验才能看懂。
中文描述也太不清楚了。

相关推荐

    java 编程入门思考

    7.5.1 Java的“多重继承” 7.5.2 通过继承扩展接口 7.5.3 常数分组 7.5.4 初始化接口中的字段 7.6 内部类 7.6.1 内部类和上溯造型 7.6.2 方法和作用域中的内部类 7.6.3 链接到外部类 7.6.4 static内部类 7.6.5 引用...

    java面向对象编程课后思考题答案

    Java支持单一继承,即一个子类只能有一个父类,但可以通过接口实现多重继承的效果。 4. **多态**:多态是指同一消息可以被不同类型的对象响应,实现了灵活的代码设计。Java通过方法重写(Override)和方法重载...

    《Java面向对象编程》思考题及答案PDF

    7. **接口**:接口在Java中是抽象类型,它定义了一组抽象方法,用于实现多重继承的效果。类可以实现多个接口,但只能继承一个类。 8. **异常处理**:Java提供了异常处理机制,通过try-catch-finally语句块来捕获和...

    <java面向对象编程>孙卫琴课后答案

    Java支持单一继承,即一个子类只能有一个父类,但可以通过接口实现多重继承的效果。 4. **多态**:多态是指同一消息可以被不同类型的对象响应。在Java中,多态主要体现在方法的重写(Override)和重载(Overload)...

    java抽象类与接口的深入思考

    - **多重继承**:Java不支持多重继承,但可以通过实现多个接口的方式来达到类似的效果。 - **灵活性与维护性**:当系统需要频繁地扩展新功能时,使用接口可能会更加灵活。因为接口的实现可以在不修改现有类的情况下...

    Java程序设计教程习题答案

    2. **继承与多态**:Java支持单一继承,一个类只能继承一个父类,但可以通过接口实现多重继承。多态性允许子类对象可以替换父类对象,提供了更大的灵活性。 3. **异常处理**:Java使用try-catch-finally结构处理...

    类的继承和接口的扩展优秀文档.ppt

    1. **继承层次结构**:一个类可以有多个子类,形成层次结构,但Java不支持多重继承,即一个类只能直接继承一个父类。 2. **成员访问**:子类能访问父类中非私有(public, protected, default)的成员变量和方法,但...

    《面向对象程序设计JAVA语言程序设计》期末考试试题及部分答案.zip

    2. 继承:Java支持单一继承,即一个子类只能直接继承一个父类,但可以通过接口实现多重继承的效果。继承使得代码复用,子类可以扩展或修改父类的功能,同时保持代码的组织结构清晰。 3. 多态:多态是指同一种行为在...

    s2-JavaOOP内部测试

    在Java中,一个类可以只继承一个父类,但可以通过接口实现多重继承的效果。 4. **多态**:多态是指同一种行为在不同对象上表现出不同的形式。Java通过方法覆盖和接口实现来实现多态性,使得代码更具有灵活性和扩展...

    JAVA考试题

    Java支持单继承,即一个子类只能有一个直接父类,但可以通过接口实现多重继承的效果。 4. **多态**:多态是指同一个引用类型的变量在不同情况下可以指向不同类的对象,并且能够调用相应的独特方法。这是通过方法...

    Thinking In Java 3

    - **接口**:作为完全抽象的类型,接口用于定义行为规范,支持多重继承。 3. **异常处理**: - **异常类层次**:了解如何使用try-catch-finally结构捕获和处理运行时错误。 - **自定义异常**:创建新的异常类以...

    thinking java 3 ch (1-11).pdf

    接口可以用来实现多重继承,提高代码的灵活性。 4. **异常处理**:Java的异常处理机制,包括try-catch-finally语句块,异常类的层次结构,以及如何自定义异常。 5. **数组**:一维和多维数组的使用,包括静态数组...

    thinking java 3

    它们用于定义行为规范,可以实现多重继承效果。 6. **异常处理**:Java的异常处理机制提供了一种捕获和处理错误的方式。通过try-catch-finally语句块,可以确保即使在异常情况下,程序也能执行必要的清理操作。 7....

    thinking in java (第三版)

    Java支持单一继承,即一个子类只能有一个直接父类,但可以多重实现接口。 4. **多态**:多态是指同一种行为在不同对象上有不同的表现形式。在Java中,多态主要通过方法重写(Override)和向上转型实现。它增强了...

    Java就业面试题大全.doc

    4. **继承相关的语法**:继承是面向对象编程的一个核心概念,允许子类继承父类的属性和方法。 5. **异常的语法**:Java提供了强大的异常处理机制,包括try、catch、finally等关键字,用于处理运行时可能发生的错误...

    Java面试宝典.doc

    在Java中,若需要跳出多重嵌套循环,可以使用带有标签的`break`语句,例如`break ok;`,这样可以跳出标号所指的最外层循环。此外,也可以通过修改外层循环的条件来达到类似的效果,使得内层循环中的某些条件能影响...

    高职学生Java语言编程能力的实践与探索.pdf

    它起源于1995年,基于C++语言的基础上发展而来,它摒弃了C++中复杂难懂的概念,如指针、多重继承等,这使得Java语言相对于C++而言更简单易学,同时它也具备了良好的安全性和平台独立性。 对于高职院校学生来说,...

    JAVA程序设计-3期(KC005) KC 005 050000 002-教学单元设计-单元二 面向对象程序设计.doc

    类可以实现多个接口,从而实现多重继承的效果。 4. **常用Java包的使用**: - Java提供许多预先定义好的包,如`java.util`用于集合框架,`java.io`用于输入输出,`java.awt`和`javax.swing`用于图形用户界面等。...

Global site tag (gtag.js) - Google Analytics