我定义了一个超类,如下所示:

 public class superClass{

        private superClass superObj;

        public superClass() {
        }
        public superClass(superClass superObj) {
            this.superObj =  superObj;
        }

       public start()...
       public receive()..


我的子类就像;

public class subclass extends superclass {
@Override
 public receive(){
 ........
   }
 public static void main(String args[]){
    Superclass superTst = new Superclass(new subclass());
    superTst.start();
...
}


在这里,我的子类实际上不是与超类的“是”关系。但是我想这样扩展,因为在超类中,我做了一些处理输出(超类产生新线程并进行处理,因此我可以在超类上获得输出),该输出必须由子类访问。

从理论上讲是正确的吗?

最佳答案

就像你提到的那样


子类实际上不是与超类的“是”关系


因此,我想您应该使用组合而不是继承,如下所示:

    public class superClass{

        private subclass subclassObj;

        public superClass() {
        }
        public superClass(subclass subclassObj) {
            this.subclassObj =  subclassObj;
        }

       public start(){
           //some code
       }

       public receive(){
           subclassObj.receive(); // call subclass' receive() method
       }


您的subclass可以像:

public class subclass {
 public receive(){
     //some code
 }

 public static void main(String args[]){
    Superclass superTst = new Superclass(new subclass());
    superTst.start();
    // ...
 }
}

关于java - 将父类(super class)实例传递给其构造函数是更好的做法吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36995651/

10-09 01:16