2011-08-08 27 views
0

我得到找不到符號 - 構造乘員(位置) 當我嘗試編譯乘員找不到符號 - 構造函數的Java

public class Occupant 
{ 
protected Position position; 
public String string=" "; 
protected String name; 
protected String description; 

public Occupant(Position position, String name, String description){ 
    this.position=position; 
    this.name=name; 
    this.description=description; 

} 






public class Animal extends Occupant 
{ 
protected String name; 
protected String description; 
protected double dangerLevel; 
protected String stringRepresentation; 
protected Position position; 

public Animal(Position position, String name, String description, double dangerLevel) { 
    super(position); 
    super(name); 
    super(description); 
    this.position=position; 
    this.dangerLevel=dangerLevel; 
    this.name=name; 
    this.description=description; 

} 

的子類動物爲什麼我得到這個錯誤?感謝

+0

這就像看着一個知識的射擊隊 –

回答

1

super(position, name, description); 
2

super(position)呼籲用一個參數父類型構造替換

super(position); 
super(name); 
super(description); 

。由於一個參數構造函數不存在,編譯失敗。試試這個:

super(position,name,description);

1

的是沒有接收1種說法Occupant類的構造函數。

此:

super(position); 
super(name); 
super(description); 

應該是:

super(position, name, description); 
2

因爲你調用父類的構造函數的,其中不存在:

super(position); 
super(name); 
super(description); 
1

你不能打電話這樣一個sup construcotr。

請使用

public Animal(Position position, String name, String description, double dangerLevel) { 
      super(position, name, description); 
      this.position = position; 
      this.dangerLevel = dangerLevel; 
      this.name = name; 
      this.description = description; 

     } 
2

,因爲當你調用super(...)你基本上調用乘員(......),你得到這個錯誤。由於Occupant(...)有3個參數,所以super(...)也是必須的。嘗試使用:

super(position, name, description); 
1

這是因爲在Animal使用super的。

你的Occupant類有一個構造函數Position, String, String,因此你的超級應該傳遞相同的值。

以下super調用指向一個不存在的Occupant構造函數。

super(position); 
super(name); 
super(description); 

解決方案:通過傳遞相關字段(如上所述)調用超類的構造函數。

public Animal(Position position, String name, String description, double dangerLevel) { 
    super(position, name, description); 
    // other declarations.. 
} 
1
public Occupant(Position position, String name, String description); 

父類的構造有三個參數,但你只是路過一個從派生類。

public Animal(Position position, String name, String description, double dangerLevel) 
{  
    super(position);  // Just passing one. 
    super(position, name, description);  // Do this instead 
3

以及所有其他的答案正確地指出,你應該叫單超構造函數有三個參數,而不是試圖做一個參數的時間,這是值得一提的是構造函數只能有一個super(...)致電或一個this(...)致電。

構造函數(一個比Object本身以外)執行恰好一個鏈接操作:

  • 含蓄,如果不指定別的,你可以鏈無參數的超級構造函數。所以:

    Foo(int x) 
    { 
    } 
    

    相當於

    Foo(int x) 
    { 
        super(); 
    } 
    

    ...如此明顯,必須有可訪問的參數的構造函數工作

  • 它能鏈明確的超級構造函數,根據你的例子

  • 它可以鏈接到另一個構造函數在同一個cl屁股,例如

    Foo() 
    { 
        this(10); 
    } 
    

    班級內的鏈接不允許導致循環。 (您不能有兩個構造函數其中鏈彼此。)

之前任何變量初始化被執行的鏈接時,必須付出構造函數體的開始,並再次,有恰好一個以上選項。