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

//父类
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”。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值