3

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

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

提前致谢!

4

3 回答 3

1

我看到两种选择:

  • 将相关父级的属性和方法设为静态,以便在所有子代之间共享。
  • 用接口替换父类,在子类实例之间共享原父类的属性。
于 2013-06-11T11:11:57.783 回答
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);
        }
    }
}
于 2013-06-11T11:23:29.483 回答
1

使ExtendedParent实例将呼叫转发到Parent他们作为成员保留的实例。并且不应该只转发调用的方法,添加区别于ExtendedParent.Parent

于 2013-06-11T11:17:53.427 回答