在我的类层次结构的顶部是类Mammal
。 Mammal
的每个实例都需要静态初始化。(这个例子很愚蠢,我知道。如果你很好奇,我使用的是Android片段,我无法覆盖它们的构造函数)
例如:
public abstract class Mammal{
private static initialize(int a, String b, ...){
...
}
}
public class Dog extends Mammal{
public static Dog newInstance(int a, String b, ...){
Dog dog = new Dog();
initialize(a, b, ...);
}
}
public class Cat extends Mammal{
public static Cat newInstance(int a, String b, ...){
Cat cat = new Cat();
initialize(a, b, ...);
return cat;
}
}
这些课程可以无限期地继续下去。我查看了calling a subclass constructor from a superclass,但我无法弄清楚如何将它应用于静态上下文。提前谢谢!
答案 0 :(得分:1)
初始化方法应该有一个哺乳动物参数来从其他参数初始化它的数据:
private static initialize(Mammal mammal, int a, String b, ...){
mammal.setA(a)
// ...
}
答案 1 :(得分:1)
来自Oracle Java Docs
如果子类定义了与a具有相同签名的静态方法 超类中的静态方法,然后是子类中的方法 隐藏超类中的那个。
这里有更好的解释Overriding vs Hiding Java - Confused
要访问子类的方法,您需要引用子类
来调用该方法Mamal mamal = new Dog();
mamal.initialize(..) // method of super class
((Dog)mamal).initialize(...)// method of class dog