在子类的继承关系中,会存在父类和接口有同名方法的情况,这种情况该怎么处理呢?
实验验证:
interface MyInterface {
void test() ;
}
class BaseClass {
void test() {
print("hello") ;
}
public class MainClass extends BaseClass implements MyInterface {
public static void main(String[] args) {
MainClass a = new MainClass() ;
a.test() ;
}
}
此时编译会报错,但是把BaseClass中的test方法添加一个public标记的话,就不会报错了
class BaseClass {
public void test() {
print("hello") ;
}
}
可以看出基类的方法成功实现了接口的test方法,
在实验一下另外一种情况,BaseClass中的test方法访问权限为包访问权时:
class BaseClass {
void test() {
print("hello") ;
}
}
public class MainClass extends BaseClass implements MyInterface {
@Override public void test() {
print("java") ;
}
public static void main(String[] args) {
MainClass a = new MainClass() ;
a.test() ;
}
}
这是程序运行会打印出java
可以看出时java在同时有继承和实现的时候顺序是先继承后实现,
所以方法名字一样的时候,继承自基类的方法如果是public的,编译器会认为这个继承自基类的方法已经实现了接口,所以不会报错,当基类的方法不适public的时候,就会发生这种情况,所以我们在子类中实现该方法的时候,也会覆盖基类中的方法