Daniel Herbrych
Daniel Herbrych

Reputation: 39

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
   }
}

What I need is passing reference (data) to abstract class Generator. I can pass reference in constructors of GeneratorA/GeneratorB but I have more child classes and it is inefficient. Is any way how to pass reference data to abstr. class Generator? I just want to inherit reference from class Generator... Thanks!

Upvotes: 1

Views: 4846

Answers (3)

SandeepGodara
SandeepGodara

Reputation: 1528

It seems from your description you need the same data reference in all Generator objects in this case you can store data as a static field in the abstract class and access in objects of sub classes like:

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..
    }
}

Upvotes: 0

Mathews Mathai
Mathews Mathai

Reputation: 1707

An abstract class can have non-abstract methods and constructors.

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

You could use the constructor to set the values in the subclass.

OR

If for some reason you don't want to add a constructor/non-abstract method to the abstract class Generator ,you could add one more class which extends Generator and the other subclasses could extend this new class.

You could write a method in the new class for setting values and use it.

Upvotes: 0

nnunes10
nnunes10

Reputation: 550

You must add a constructor to your abstract class. Then you just have to call super(data) in subclasses constructor.

See the code bellow:

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
    }
}

Upvotes: 2

Related Questions