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

如何传递对抽象类Java的引用,java,reference,abstract,Java,Reference,Abstract,我需要的是将引用(数据)传递给抽象类生成器。我可以在GeneratorA/GeneratorB的构造函数中传递引用,但我有更多的子类,效率很低。是如何将参考数据传递给ABSR的任何方法。类生成器?我只想从类生成器继承引用。。。 谢谢 抽象类可以有非抽象方法和构造函数 Data data = new Data("path"); //I read data from excel and save. This code is in Main. public abstract class Genera

我需要的是将引用(数据)传递给抽象类生成器。我可以在GeneratorA/GeneratorB的构造函数中传递引用,但我有更多的子类,效率很低。是如何将参考数据传递给ABSR的任何方法。类生成器?我只想从类生成器继承引用。。。
谢谢

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

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
,您可以再添加一个扩展
Generator
的类,其他子类可以扩展这个新类


您可以在新类中编写用于设置值的方法并使用它。

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

请参见下面的代码:

public abstract class Generator{
   Generator(....)
{
   //set here
}
   public abstract double[][] generate();
   //here I need reference - 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
    }
}

如果generate方法需要
数据
对象,则应将其作为参数传递。hmmm我认为我可以以某种方式从父类读取
数据
。或者,您可以在父类中实现一个
设置器
,该设置器将
数据
存储在父类的字段中。在调用
generate()
方法之前,您需要调用该setter…这些是非静态的内部类吗?如果是,您应该能够读取
数据
,如果它是父类中的字段。但我同意Peter的观点,将
数据
传递给
generate()
。进行更改:
public abstract double[][]生成(参数)
您可以继承此方法并传递所需的变量/引用(数据,无论您如何称呼它)。
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..
    }
}