已编辑:
直截了当......我有一个班级
public class P_Gen{
protected String s;
protected Object oP_Gen;
protected Object oP_Gen2;
public P_Gen(String str){
s = str;
oP_Gen = new MyClass(this);
oP_Gen2 = new MyClass2(this);
}
}
扩展课程:
public class P extends P_Gen{
protected Object oP;
public P(String str){
super(str);
oP = new MyClass(this);
}
}
MyClass:
public class MyClass{
protected Object oMC;
public MyClass(P extendedObject){
this.oMC = extendedObject.oP;
}
}
MyClass2:
public class MyClass2{
protected Object oMC2;
public MyClass(P_Gen thisObject){
this.oMC2 = thisObject.oP;
}
}
上面显示的P_Gen类给出了一行错误:
oP_Gen = new MyClass(this);
声明“找不到符号构造函数MyClass(P_Gen)。”
我想要实现的是从MyClass2中获取P.oP。
我最初的想法是P.this === P_Gen.this。换句话说,P_Gen从super()
调用时消失,剩下的只是P扩展类。
答案 0 :(得分:0)
我对你的问题(以及你的代码,在任何地方都没有doSomething()方法)感到有点困惑,但你可能会从P_Gen中获益,它是一个带有抽象方法doSomething()的抽象类。然后P可以实现该方法,任何引用P_Gen的东西都可以调用它(并在P中获取实现,如果它是什么实例)。
答案 1 :(得分:0)
好的,
public MyClass(P_Gen thisObject){...} public MyClass2(P_Gen thisObject){...}
这样做,您可以执行以下操作:
new MyClass(new P());
此外,您需要在thisObject
和P
个结构中投放MyClass
到MyClass2
,这样您就可以获得oP
变量。
我的建议4你要更多地了解一下java继承。
JP
答案 2 :(得分:0)
经过一夜安眠......这不是我想做的那不是错,而是我的方法。我回到了OOP的开头。对我感到羞耻。无论如何,我给了@juanp的答案,因为他说“我的建议4,你要更多地了解一下java继承。”。
对于那些感兴趣的人,这里应该是这样的:
生成的P_Gen类:
public abstract class P_Gen{
protected String s;
protected Object oP;
public P_Gen(String str){
this.s = str;
init(str);
}
protected void init(String str){
if(this instanceof P){
oP = new MyClass((P)this);
}
}
}
扩展P类:
public class P extends P_Gen{
public String sSTR;
public P(String str){
super(str);
}
@Override
protected void init(String str){
this.sSTR = str;
this.oP = new MyClass(this);
}
}
MyClass类:
public class MyClass{
protected Object oMC;
public MyClass(P extendedObject){
this.oMC = extendedObject.sSTR;
}
}
我所做的是将MyClass实例化从构造函数移动到init函数。那个init函数然后在扩展类中被覆盖......我知道非常基本的东西。
更基本的,为我的P_Gen类添加了抽象,以防止它直接实例化。我还可以在P_Gen中声明一个抽象的init方法。
所有这些让我觉得......也许.... :-) ...另一天。感谢您帮助我回到正轨。