Java基础——继承和实现对类中字段的影响

来源:互联网 发布:pssproject监控软件 编辑:程序博客网 时间:2024/06/08 11:22
//父类public class Super{    public static int A = 111;    public void test(){        System.out.println("super method");    }}//子类,继承并实现一个接口public class Sub extends Super implements Inter2{    public static int A = 222;}//接口interface Inter2{    static int A = 1;    void test();}//调用public static void main(String[] args) {    Sub sub = new Sub();    sub.test();    System.out.println(Sub.A);}
  • Sub中可以不用实现test(),因为继承的Super中有test(),会调用父类的test();
  • 如果注释掉Sub中的“public static int A = 222;”,会出现编译错误“The field Sub.A is ambiguous”,意思是Sub.A是模糊的,这是由于Sub本身没有字段A,于是编译器去找父类或实现的接口中是否有匹配的字段A,结果发现父类Super和接口Inter2中都有A,所以无法判断字段A是父类Super中的A还是接口Inter2的A。

这里写图片描述

  • 如果将Super的字段A和接口Inter2的字段A注释掉,然后Super实现Inter接口,Inter如下:

     interface Inter{    static int A = 0;}

    main方法中的“System.out.println(Sub.A);”并不会报错,因为编译器在直接父类和实现接口中找不到A后,会继续向直接父类的实现接口或父类继续找,也会向实现接口的父接口找,所以,Sub会找到父类Super实现的接口Inter中的A,编译不出错。

总结:

这里写图片描述

一个类的字段就是按照这样的顺序查找,先查自己有没有,如果没有,再查父类和接口,依次向上,但是如果两个没有关联,也就是没有连线的类或接口都有所查的字段,那么就会报编译错误“The field Sub.A is ambiguous”。

阅读全文
0 0