如何在超类和下级类之间的层次结构中启动对象?

时间:2017-07-21 06:42:30

标签: java jvm

我知道,在下级类的构造函数中有一个隐式的super()语句,但是如何启动类字段,实例字段和常量字段以及它们在超类和从属类中的顺序,以及它们在哪里?存储方法信息?

如下所示,程序的输出为“null”,但如果我在子类中的s之前添加静态修饰符,则它将为“child”。我想,为了解释这样的结果,上述问题的答案是必不可少的。

public class Parent {

    private String s = "parent";

    public Parent() {
        call();
    }

    public void call() {
        System.out.println(s);
    }

    public static class Child extends Parent {
        private /*static*/ String s = "child";

        public Child() {
        }

        public void call() {
            System.out.println(s);
        }
    }
    public static void main(String[] args) {
        Child child = new Child();
    }
}

1 个答案:

答案 0 :(得分:0)

你可以用这样的参数创建构造函数 在父类

public Parent(String s) {
        this.s = s;
        call();
    }

和子类构造函数

  public Child() {
     super(this.s);
  }

当你宣布Child Constructor时,他的第一行是super() 默认; 它正在调用Parent类的构造函数和Parent类的调用方法。

你也可以这样做

public class Parent {

    private String s = "parent";

    public Parent(String ss) {
        call(ss);
    }

    public void call(String ss) {
        System.out.println(ss);
    }

和儿童班

public static class Child extends Parent {
        private String s = "child";

        public Child() {
             super(this.s);
        }
    }
    public static void main(String[] args) {
        Child child = new Child();
    }
}

你不再需要子类中的call()方法,因为你在父类中有它,你也可以从子类访问这个方法。