2011-11-15 146 views
0

以下代碼是測試程序。爲什麼我不能在這個程序中使用A(int a)?超級類中的java構造函數

public class A { 
    int a; 
    void meth(int b) { 
     a+=b; 
    } 
    A(int a) { 
     this.a=a; 
    } 
} 

class B extends A { 
    int a; 
    void meh2(int b) { 
     a+=b; 
    } 
} 

爲什麼不能傳參數給構造函數?原因是什麼? Netbeans錯誤消息:

構造函數類tma1.A中的A不能應用於給定的類型; 必需:int found:無參數 原因:實際和正式參數列表長度不同

+1

爲什麼你不能?看起來你甚至不想... –

+2

「方法」的下放:'method' - >'meth' - >'meh2' –

回答

2

在類B中,您需要構造函數。如果你的意思是你不能從B調用A,那只是因爲你擴展了A類,所以你需要使用super,它指向超類。例如B可以是:

class B extends A { 
    B(int a) { 
//You can put additional code here 

// This calls the constructor of A 
     super(a); 

//You can put additional code here 
    } 
    int a; 
    void meh2(int b) { 
     a+=b; 
    } 
} 

否則,你需要分配的東西給變量B類,如果你不是在代碼中忽略的東西

+0

謝謝,但是爲什麼在類A的構造函數中刪除int a,程序會好的? – hkguile

+0

因爲Java創建了一個默認的構造函數,就像「classname()」。所以,如果給A的構造函數一些參數,默認的構造函數與它不匹配,並且需要您明確指定一個參數。 –

1

除非類有一個定義的構造函數,它會自動有一個無參數的構造函數,僅僅調用super()

您編譯器的抱怨似乎是:「您的無參數構造函數[您無法看到]正在調用一個不存在的父級無參數構造函數。」

A沒有無參數構造函數,因爲還有另一個定義(所以java不必創建一個)。

相關問題