超类的重写保护方法

杰伊米德赛

在下面的示例中,为什么字符串b打印为null,而字符串c打印为“ gg”。

如果我错了,请纠正我,只要子类(BClass)重写超类(AClass)的受保护方法(即initClass())。如果实例化该子类。超类必须使用子类指定的替代方法。

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();

    }

}
SomeJavaGuy

JSF 12.5开始

在示例中,您可以看到执行顺序。第一步是从构造器到Object构造器的调用之后发生这种情况:

接下来,将执行类[...]的实例变量的所有初始化程序。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章