共享相同超类实例的类

时间:2013-06-11 10:56:28

标签: java

我有一个非常简单的问题。

2个类可以共享同一个超类实例吗?我知道答案是否定的,因为super就是实例本身,但我真的有一些解决方法......

public class Parent{
    private final int parentId;
    private static final HashMap<Integer,Parent> parentMap = new HashMap<Integer,Parent>();

    private Parent(int i){
       parentId = i;
       parentMap.put(i,this);
    }

    public static Parent newInstance(int i)
    {
        if(parentMap.containsKey(i))
            return parentMap.get(i);

        return new Parent(i);

    }
}

/ *其他课程* /

public class ExtendedParent extends Parent{
    public ExtendedParent(int i){
        super(i);//I should use the factory at this point...
    }

    public static main(String[] args){
        /*What I am trying to achieve*/
        Parent p1 = new ExtendedParent(1);
        Parent p2 = new ExtendedParent(1);

        if(p1.equals(p2))
            System.out.println("This is what i aim to get!!!!");

    }
}

重新制作代码以清楚地展示我的问题。

有人可以帮帮我吗? = d

提前致谢!

3 个答案:

答案 0 :(得分:1)

我看到两种选择:

  • 使相关父级的属性和方法保持静态,以便在所有后代之间共享它们。
  • 用接口替换父类,并在子类实例之间共享原始父类的属性。

答案 1 :(得分:1)

使ExtendedParent个实例转发对他们作为成员保留的Parent实例的调用。不仅应该转发呼叫的方法,还要添加区分ExtendedParentParent的其他处理。

答案 2 :(得分:1)

你可以使用内部类。你甚至可以让几个不同的类型共享相同的父类对象。这不是继承,但结果将是你正在寻找的:

public class Test {

    private final String text;

    Test(String text) {
        this.text = text;
    }

    public static void main(String[] args) throws Exception {
        Test t = new Test("Text");
        A a = t.new A();
        B b = t.new B();
        a.printA();
        b.printB();
    }

    class B {
        public void printB() {
            System.out.println(text);
        }
    }

    class A {
        public void printA() {
            System.out.println(text);
        }
    }
}