4 回答

TA貢獻1817條經驗 獲得超6個贊
關于前兩位的回答有以下說明和補充:
1.首先這不叫覆蓋(Override)。類B繼承了類A的方法a,且類B定義了一個新的方法a,兩個方法參數不同,所以是兩個不同的方法。
2.是否是重載(Overload)仍存在爭論。
觀點一:是重載,是發(fā)生在同一類中的重載。
【繼承來的屬性和方法盡管是隱式的,但仍是類B的屬性和方法?!克灶怋有兩個方法,包括繼承自a的方法,屬于重載。
觀點二:不是重載,重載只發(fā)生在同一類中,而類B繼承類A方法的途徑是通過查找調用(如上)。
、、、話說還有覺得是跨類重載的、、、但是這個和定義矛盾哈、、、
綜上,此問題爭議較多,個人比較傾向于觀點一,【】內容來自baidu,下面是運行結果及代碼。
關于覆蓋和重載的區(qū)別:
1.覆蓋,又稱重寫(Override)。發(fā)生在子類與父類之間。
子類是可以繼承父類的某些方法的,當父類的方法對子類不適用時,需要在子類中寫一個和父類一樣的方法(當然方法內的程序塊是不一樣的),此處“一樣”指方法名必須一樣、返回值類型互相兼容、參數個數順序類型必須一致等等。此時如果子類要用這一方法,就會直接調用覆蓋過的方法,而當沒有檢測到重寫時,才會調用從父類繼承下來的方法。
舉我學習時的例子:
因為不同動物的叫聲和食物都不同,所以要將父類中的方法覆蓋掉。
2.重載(Overload)。一般發(fā)生在同一類的不同方法間。
重載要求兩個方法返回類型一樣,方法名一樣,參數列表不一樣(類型、順序、個數等)。
這樣兩個方法間互為不同的方法,調用哪一個時由參數決定。
舉例:
class A{
void a(int i, float j){}
void a(float i, int j){}//兩個方法接收的參數類型順序不同,所以是兩個不同的方法
}
class B{
void b(int i){}
void b(){}//參數個數不同,第二個方法無參數
}
class C{
void c(int i){}
void c(float i){}//參數類型不同
}

TA貢獻1796條經驗 獲得超7個贊

TA貢獻2041條經驗 獲得超4個贊
就是重載啊,java繼承機制里,子類會開辟空間用來保存繼承的父類成員,因為繼承過來就和父類不是同一個了。例如B類里的a(int x)方法是和父類不一樣的,可以在父類這個方法里打印一下當前類名,當子類調用時顯示的會是子類名。
添加回答
舉報