A类扩展B实现C

时间:2016-06-22 13:50:27

标签: java interface

问题: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

2 个答案:

答案 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方法都有相同的签名