当前位置:首页 > 开发 > 编程语言 > Java > 正文

关于Java继承的一个小问题。。。

发表于: 2014-10-15   作者:随便小屋   来源:转载   浏览:
摘要: 今天看Java 编程思想的时候遇见一个问题,运行的结果和自己想想的完全不一样。先把代码贴出来! //CanFight接口 interface Canfight { void fight(); } //ActionCharacter类 class ActionCharacter { public void fight() { System.out.pr

今天看Java 编程思想的时候遇见一个问题,运行的结果和自己想想的完全不一样。先把代码贴出来!

//CanFight接口
interface Canfight {
    void fight();
}
//ActionCharacter类
class ActionCharacter {
    public void fight() {
        System.out.println("Fight from ActionCharacter");
    }
}
//Hero类继承ActionCharacter类实现Canfight接口
class Hero extends ActionCharacter implements Canfight {
    public void swin() {}
    public void fly() {}
}

public class Adventure {
	//参数为Canfight,向上转型,调用fight方法
    public static void t(Canfight x) {
        x.fight();
    }
    //参数为ActionCharacter类型,向上转型,调用fight方法
    public static void w(ActionCharacter x) {
        x.fight();
    }

    public static void main(String[] srgs) {
        Hero h = new Hero();
        t(h);
        w(h);
    }
}

/*运行结果
 Fight from ActionCharacter
 Fight from ActionCharacter
 */
 

 在main方法中,调用t方法时,Hero的对象h向上转型为一个Canfight,然后在调用Canfight的fight方法,由于fight方法没有具体的实现,我认为应该不会有输出或者编译器报错。

 

事实结果应该是 Hero继承ActionCharacter,在运行时,将Hero中所有在ActionCharacter中能用到的东西全部复制到ActionCharacter中,这样在ActionCharacter类中就有了一个fight方法的具体实现。从另外一个角度讲就是在ActionCharacter类中有了接口Canfight中的fight方法的实现。

 

我自己分析的是这样的,希望大神给出指点。。。

关于Java继承的一个小问题。。。

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号