我是Java的新手,我希望有人能帮我解决这个问题。
我必须创建一个将按以下方式调用的方法:
Child.getI()
;
Parent.java
package MyTest;
public class Parent {
private static int i;
public Parent(int x){
i = x;
}
public static int getI(){
return i;
}
}
Child.java
package MyTest;
public class Child extends Parent {
public Child(int x) {
super(x);
}
}
我应该如何设计课程,以便在致电Child.getI()
时,它会首先初始化Child
课程?它绝对不会像我那样工作。
答案 0 :(得分:0)
当您致电Child.getI()
时,您不会在类实例上调用方法(不会创建新的对象实例),但是您可以在Class<Child>
上调用它。
当java运行时第一次找到Child
时,类加载器将加载Child
类及其基类,然后执行类静态字段并阻止init。没有更多来自您的代码。
答案 1 :(得分:0)
Parent.java
包MyTest;
public class Parent {
private static int i;
public Parent(int x){
i = x;
}
public static int getI(){
return i;
}
}
Child.java
包MyTest;
public class Child extends Parent {
public Child(int x) {
super(x);
}
public static int getI() {
final int i = 3;
return ((Parent)new Child(i)).getI();
}
}
答案 2 :(得分:-2)
您可以这样设计代码。这是一个使用静态方法的解决方案和一个没有静态方法的解决方案。
Parent.java
package MyTest;
public class Parent {
private int i;
private static int i2;
public Parent(int x){
i = x;
i2 = x;
}
public int getI(){
return i;
}
public static int getI2() {
return i2;
}
}
Child.java
package MyTest;
public class Child extends Parent {
public Child(int x) {
super(x);
}
public static int getI() {
final int i = 3;
final Parent parent = new Child(i);
return parent.getI();
}
public static int getI2() {
final int i = 3;
final Parent parent = new Child(i);
return parent.getI2();
}
}