问题:Test16的引用放在My3类型的变量m1(行A)中,Test17类中的函数show()与接口My3中的函数show()无关; 那么如何可能m1执行类Test17中的show()函数。 代码如下:
class Test17{
public void show(){
System.out.println("Show1");
}
}
class Test16 extends Test17 implements My3 {
public static void main(String[] args){
My3 m1=new Test16();//<----Line A
m1.show();
}
}
interface My3{
public abstract void show();
}
以下代码的输出为:Show1
答案 0 :(得分:0)
Test17实现My3没关系,方法签名是一样的,所以它有效!该方法继承到其子实现接口。
My3是一个界面,它定义了show()。
m1的实施是Test16。
Test16继承了Test17(及其方法)
调用show时,在Test16的父级中找到了show()的唯一实现:Test17。
答案 1 :(得分:0)
由于类Test16扩展了Class Test17,所以现在Class Test16 IS-A一个Test17意味着类Test16是Class Test17的子类,它继承了Test17的所有属性和行为。现在Test16有一个方法
public void show(){
System.out.println("Show1");
}
现在,当你实现My3接口时,它也有一个相同签名的方法,它在Class Test17(带有body)中,现在由于扩展,这个方法在Test16类中。
因此,默认情况下,您通过扩展Class Test17,在Class Test16中通过类Test17提供接口方法的实现。因为接口方法和Class Test17方法都有相同的签名