下面这个例子摘自于《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方法,书上给与的解释是:
但是这样的说法在我使用Java8 尝试之后感觉明显是错误的, Hero 必须要实现
fight()
这个方法是从Canfight
接口中过来的,仍然可以使用super.fight()
调用父类的方法
public class Hero extends ActionCharacter implements CanFight{
@Override
public void fight() {
super.fight();
}
}
上面这样的情况是因为父类和接口中都是用了同样的方法签名,通过方法的重写和继承,这样的两个方法得到了区分。
但是如果是这样的情况会造成错误:
将父类中的方法返回值改成int
,子类重写的时候就会不清楚重写的方法的具体所指:
最近在复习Java 有感随记
网友评论