[英]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.