繁体   English   中英

如何传递对抽象类的引用 - Java

[英]How to pass reference to abstract class - Java

Data data = new Data("path"); //I read data from excel and save. This code is in Main.

public abstract class Generator{
   public abstract double[][] generate();
   //here I need reference - data
   }

public class GeneratorA extends Generator{
   public double[][] generate(){
   //first implementation - I want to work with data
   }
}


public class GeneratorB extends Generator{
   public double[][] generate(){
   //second implementation - I want to work with data
   }
}

我需要的是将引用(数据)传递给抽象类 Generator。 我可以在 GeneratorA/GeneratorB 的构造函数中传递引用,但是我有更多的子类并且效率低下。 有什么方法可以将参考数据传递给 abstr。 类生成器? 我只想从类 Generator 继承引用...谢谢!

您必须向抽象类添加构造函数。 然后你只需要在子类构造函数中调用super(data)

看下面的代码:

public abstract class Generator{

    Data data;

    public Generator(Data data) {
        this.data = data;
    }

    public abstract double[][] generate();
        //here I need reference - data
    }
}

public class GeneratorA extends Generator{

    public GeneratorA(Data data) {
        super(data);
    }

    public double[][] generate(){
        //first implementation - I want to work with data
    }
}


public class GeneratorB extends Generator{

    public GeneratorB(Data data) {
        super(data);
    }

    public double[][] generate(){
    //second implementation - I want to work with data
    }
}

抽象类可以有非抽象的方法和构造函数。

public abstract class Generator{
   Generator(....)
{
   //set here
}
   public abstract double[][] generate();
   //here I need reference - data
   }

您可以使用构造函数来设置子类中的值。

或者

如果由于某种原因您不想向抽象类Generator添加构造函数/非抽象方法,则可以再添加一个扩展Generator的类,其他子类可以扩展这个新类。

您可以在新类中编写一个方法来设置值并使用它。

从您的描述看来,您需要在所有 Generator 对象中使用相同的数据引用,在这种情况下,您可以将数据作为静态字段存储在抽象类中,并在子类的对象中访问,例如:

public abstract class Generator{

    static Data data;
    public static void setData(Data data){
        Generator.data=data;
    }
    public abstract double[][] generate();
}


Data data = new Data("path");
Generator.setData(data);

public class GeneratorA extends Generator{
    public double[][] generate(){
        //here you can work with data..
    }
}

暂无
暂无

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

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