您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Java继承-实例变量覆盖

Java继承-实例变量覆盖

因为继承旨在修改行为。行为是通过方法公开的,这就是为什么可以覆盖它们的原因。

字段不是行为而是状态。您不需要修改它,也不需要修改超类使用的私有方法。它们旨在让超类完成其工作。

你可以隐藏字段,但不能覆盖它。

隐藏意味着字段的值取决于所访问的类。子类中的字段将“隐藏”超类中的字段,但是两者都存在。

隐藏字段是非常糟糕的做法,但是可以:

public class HideField {

    public static class A
    {   
        String name = "a";

        public void doIt1() { System.out.println( name ); };
        public void doIt2() { System.out.println( name ); };   
    }

    public static class B extends A
    {
        String name = "b";

        public void doIt2() { System.out.println( name ); };
    }

    public static void main(String[] args)
    {
        A a = new A();
        B b = new B();

        a.doIt1(); // print a
        b.doIt1(); // print a
        a.doIt2(); // print a
        b.doIt2(); // print b <-- B.name hides A.name
    }
}

根据是否重写该方法,访问A或中的字段B。

绝对不要那样做!那永远不是解决问题的方法,它会产生与继承相关的非常细微的错误

java 2022/1/1 18:15:31 有400人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶