我知道,在下级类的构造函数中有一个隐式的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();
}
}
答案 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()方法,因为你在父类中有它,你也可以从子类访问这个方法。