简化类层次结构中的代码

时间:2014-08-25 03:32:22

标签: java class static

在我的类层次结构的顶部是类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,但我无法弄清楚如何将它应用于静态上下文。提前谢谢!

2 个答案:

答案 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  
相关问题