加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 重写超类的受保护方法

发布时间:2020-12-15 04:28:49 所属栏目:Java 来源:网络整理
导读:在下面的例子中,为什么String b打印null并且String c打
在下面的例子中,为什么String b打印null并且String c打印“gg”.

如果我错了,每当子类(BClass)覆盖超类(AClass)的受保护方法(即initClass())时,请纠正我.如果您实例化子类.超类必须使用子类指定的overriden方法.

public class Example {

    public class AClass {

        private String a;

        public AClass() {
            initClass();
        }

        protected void initClass() {
            a = "randomtext";
        }
    }

    public class BClass extends AClass {

        private String b = null; 
        private String c;          


        @Override
        protected void initClass() {
            b = "omg!";
            c = "gg";
        }

        public void bValue() {
            System.out.println(b);   // prints null
            System.out.println(c);  // prints "gg"
        }
    }

    public static void main(String[] args) {
        Example.BClass b = new Example().new BClass();
        b.bValue();

    }

}

解决方法

截至 JSF 12.5

在示例中,您可以看到执行顺序.第一步是将构造函数调用到Object构造函数.
之后会发生这种情况:

Next,all initializers for the instance variables of class […] are executed.

由于您的实例变量b初始化为null,因此之后将再次为null

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读