我有一个非常简单的问题。
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
提前致谢!
答案 0 :(得分:1)
我看到两种选择:
答案 1 :(得分:1)
使ExtendedParent
个实例转发对他们作为成员保留的Parent
实例的调用。不仅应该转发呼叫的方法,还要添加区分ExtendedParent
与Parent
的其他处理。
答案 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);
}
}
}