2016-03-16 101 views
1
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的引用... 謝謝!如何通過引用抽象類 - Java

+5

如果生成方法需要'數據data'對象,你應該把它作爲一個參數。 –

+0

嗯我以爲我可以從父類讀取'數據'...... –

+0

或者,你可以在父類中實現一個'setter',它將父類中的數據存儲在父類的字段中。然後你需要在調用你的'generate()'方法之前調用setter ... –

回答

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

抽象類可以有非抽象方法和構造函數。

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

您可以使用構造函數來設置子類中的值。

OR

如果由於某種原因,你不希望添加一個構造函數/非抽象方法抽象類Generator,你可以添加更多的延伸Generator和其他子類可以擴展這個新類類。

您可以在新類中編寫一個方法來設置值並使用它。

0

它從你的描述看來你需要在所有發電機相同的數據的參考對象在這種情況下,你可以將數據存儲爲抽象類靜態字段和訪問的對象子類像:

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