当前位置:首页 > 开发 > 编程语言 > 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

    震惊

    震惊

编辑推荐
近期在维护一个老项目,前台传过来的日期类型是一个String "2014-7-30"这样,数据库设计是Date类型
最近遇到这样一个问题,以前的时候并未注意;新建一个工程,然后添加一个类,文件结构是这样的 然后
最近遇到这样一个问题,以前的时候并未注意;新建一个工程,然后添加一个类,文件结构是这样的 然后
有木有好心的java coder 帮我解决下这个问题~~ 这个程序写完了后 开两个命令窗口进行编译通信,竟然
有木有好心的java coder 帮我解决下这个问题~~ 这个程序写完了后 开两个命令窗口进行编译通信,竟然
首先在我们使用接口可以实现Java的多重继承,这里为什么Java自身不提供多重继承的机制呢? 这里有一
使用终端创建一个quick-cocos2d-x工程 cd 桌面的目的是改变工程新建位置 cd ~/Desktop/ $ $QUICK_CO
一 必要性 某终端产品在同一线程内处理远程升级消息和普通配置消息。终端必须在指定时间内处理局端
hadoop中,每个节点的配置信息(包括主节点)的namenode信息配置 fs.default.name hdfs://node:4900
0x01,又开始写blog了,好久没有网络了,最近终于可以开始继续研究技术了。 今天的问题是大家再用到
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号