Java 实现接口和继承中的冲突问题

2020-02-24  本文已影响0人  kolibreath

下面这个例子摘自于《Thinking in Java》
直接看下面这样的情况:

首先声明一个父类,ActionCharacter 其中有一个方法称之为fight

public class ActionCharacter {

    void fight(){}
}

同时,存在另外一个接口叫做CanFight 其中存在一个方法也是fight()

public interface CanFight {

    void fight();
}

使用类Hero去extends 和 implement 他们:

public class Hero  extends ActionCharacter implements CanFight{
}

在《Thinking in Java 》第四版中


截屏2020-02-2410.24.13.png

这个Hero没有实现fight方法,书上给与的解释是:

截屏2020-02-2410.25.16.png
但是这样的说法在我使用Java8 尝试之后感觉明显是错误的, Hero 必须要实现fight()这个方法是从Canfight接口中过来的,仍然可以使用super.fight()调用父类的方法
public class Hero  extends ActionCharacter implements CanFight{

    @Override
    public void fight() {
        super.fight();
    }
}

上面这样的情况是因为父类和接口中都是用了同样的方法签名,通过方法的重写和继承,这样的两个方法得到了区分。

但是如果是这样的情况会造成错误:


将父类中的方法返回值改成int,子类重写的时候就会不清楚重写的方法的具体所指:

截屏2020-02-2410.30.09.png

最近在复习Java 有感随记

上一篇下一篇

猜你喜欢

热点阅读