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

时间:2016-03-16 13:20:25

标签: java reference abstract

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的引用... 谢谢!

3 个答案:

答案 0 :(得分:1)

您必须在抽象类中添加构造函数。然后你只需要在子类构造函数中调用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
    }
}

答案 1 :(得分:0)

抽象类可以包含非抽象方法和构造函数。

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

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

OR

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

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

答案 2 :(得分:0)

在您的描述中,您似乎需要在所有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..
    }
}