2017-05-19 84 views
-3

当我尝试在子类中使用超类“arxiki”中的变量时,它将返回空值。基本上我把对象存储在一个ArrayList中,我想打印它们,所以我使用toString()方法。我初始化了变量,在子类中使用了super(),所以我找不到什么错误。Java继承变量返回null

public class arxiki{ 
private String onoma; 
private int pagio; 
public arxiki(String onoma, int pagio){ 
    this.onoma=onoma; 
    this.pagio=pagio; 
} 
public arxiki(){ 
} 
public arxiki(String onoma){ 
} 
public String getOnoma(){ 
    return onoma; 
} 
public int getPagio(){ 
    return pagio; 
} 

public String toString() { 
    return "\nOnoma: "+getOnoma(); 
} 

的子类“arxiki”的

public class symvolaio extends arxiki{ 
private int kodikos; 
private String onomateponimo; 
private String tilefono; 
private String imerominia; 
private String troposexoflisis; 
public symvolaio(String onoma,int kodikos, String onomateponimo, String tilefono, String imerominia, String troposexoflisis){//symvolaioconstructor 
    super(onoma); 
    this.kodikos=kodikos; 
    this.onomateponimo=onomateponimo; 
    this.tilefono=tilefono; 
    this.imerominia=imerominia; 
    this.troposexoflisis=troposexoflisis; 
} 
public symvolaio(int kodikos){ 
} 
public int getKodikos(){ 
    return kodikos; 
} 
public String getOnomateponimo(){ 
    return onomateponimo; 
} 
public String getTilefono(){ 
    return tilefono; 
} 
public String getImerominia(){ 
    return imerominia; 
} 
public String getTroposexoflisis(){ 
    return troposexoflisis; 
} 

public String toString(){ 
    return super.toString()+", Kodikos: "+getKodikos()+", Onomateponimo: "+getOnomateponimo()+", Tilefono: "+getTilefono()+", Imerominia Enarxis: "+getImerominia()+", Tropos Exoflisis: " + getTroposexoflisis(); 
} 
} 

下一个代码样品不是整个类,但使用前面提到的classes.Here份其中i填充ArrayList中的部分

 ArrayList<symvolaio> listasymvolaion= new ArrayList<>(); 
    listasymvolaion.add(new symvolaio("symv15",1,"Babis Sougias", "6958349125"," 15/2/2013", "Metrita")); 
    listasymvolaion.add(new symvolaio("symv25",2,"Alexandros Kontopidis", "6942579632", "06/9/2015", "Pistotiki karta")); 
    listasymvolaion.add(new symvolaio("kart20",3,"Michael Santana", "69134865936", "25/12/2012", "Pistotiki karta")); 
    listasymvolaion.add(new symvolaio("kart30",4,"Kostas Mpalas", "6927941825", "23/5/2016", "Metrita")); 
    listasymvolaion.add(new symvolaio("int5",5,"Maria Imalap", "6942069880", "09/4/2014", "Pistotiki karta")); 
    listasymvolaion.add(new symvolaio("int10",6,"Gustav II Adolph", "696111632", "30/10/1611", "Metrita")); 

并且最后其中该ArrayList内的对象被印刷的循环的一部分

Iterator <symvolaio> iterator = listasymvolaion.iterator(); 
      while (iterator.hasNext()){ 
       System.out.printf(listasymvolaion.get(k).toString()); 
       k++; 
+2

你_are_调用''超( onoma)'',但看看构造函数是什么... – f1sh

+0

这是它谢谢你! – SteliosA

+0

请注意,除非它们真的需要可变,否则使成员变量最终成为真正的好习惯。然后你可以确定你总是初始化它们。 –

回答

1

要从子类调用构造函数如下:

public arxiki(String onoma){ 
} 

这显然是缺乏的分配,这增加了构造的身体:

this.onoma=onoma; 
+0

谢谢,问题解决! – SteliosA

+0

那么你可以接受这个答案:) – f1sh