繁体   English   中英

Java扩展类-在超类中共享扩展类字段

[英]Java extends classes - Share the extended class fields within the super class

编辑:

直截了当...我有一堂课

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);
    }
} 

我的课:

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;
    }
}   

上面显示的Class P_Gen给我以下行错误:

oP_Gen = new MyClass(this);  

说明“找不到符号构造函数MyClass(P_Gen)”。

我要实现的是使MyClass2提供P.oP。

我最初的想法是P.this === P_Gen.this。 换句话说,当从super()调用时,P_Gen消失,剩下的仅是扩展类P。

我对您的问题(以及您的代码,在任何地方都没有doSomething()方法)感到困惑,但是您可能会受益于P_Gen是带有抽象方法doSomething()的抽象类。 然后,P可以实现该方法,任何引用P_Gen的对象都可以调用该方法(如果是实例,则可以在P中获得实现)。

好,

  1. 在类MyClass2中,构造函数应命名为“ MyClass2”
  2. 为什么不托盘定义这样的构造函数:
 public MyClass(P_Gen thisObject){...} public MyClass2(P_Gen thisObject){...} 

这样做,您可以执行以下操作:

 new MyClass(new P()); 

另外,您还需要在MyClassMyClass2构造MyClass2 thisObject MyClass2P ,这样便可以获取oP变量。 我的建议4you是关于Java继承的更多内容。

J.P

经过一夜安眠。。。不是我想做的错是错误的,而是我的态度完全相同。 我回到了OOP的开始。 真可惜 无论如何,我给@juanp答案是因为他说“我的建议4you是更多地了解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方法。

所有这些使我觉得也许.... :-) ...前一天。 感谢您帮助我重回正轨。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM