首先,我們看看關於過載,和覆蓋(重寫)的簡明定義:
方法過載:如果有兩個方法的方法名相同,但引數不一致,哪麼可以說乙個方法是另乙個方法的過載。
方法覆蓋:如果在子類中定義乙個方法,其名稱、返回型別及引數簽名正好與父類中某個方法的名稱、返回型別及引數簽名相匹配,那麼可以說,子類的方法覆蓋了父類的方法
我們重點說說覆蓋問題,以如下**為例:
public
class
people
} public
class
student
extends
people
} public
static
void
main(string args)
上述結果說明:student類的getname方法成功覆蓋了父類的方法
我們再來看看變數的覆蓋:
public
class
people
public
class
student
extends
people
public
static
void
main(string args)
通過執行結果我發現:變數的覆蓋實際上與方法的不盡相同。
用我自己的話說:變數的覆蓋最多只能算是半吊子的覆蓋。
要不然,向上轉換與不會發生資料丟失現象
people pp=
newstudent();
system.out.println(pp.name);
//執行結果為people
就我個人的經驗來說:變數的覆蓋很容易讓人犯錯誤.讓人感覺又回到了c++的繼承[這裡不是指c++帶virtual的繼承]
最後我們再來看一段**:
public
class
people
} public
class
student
extends
people
} main(string args)
顯然,如此的覆蓋,才是對我們更有用的覆蓋,因為這樣才能達到:把具體物件抽象為一般物件的目的,實同多型性
以上只是我個人的看法,有不對的地方歡迎指出來討論。
Java方法覆蓋
覆蓋方法必須滿足多種約束 1.子類方法的名稱 引數簽名和返回型別必須與父類方法的名稱 引數簽名和返回型別一致 2.子類方法不能縮小父類方法的訪問許可權。但訪問許可權可擴大。比如由預設到public。3.子類方法不能丟擲比父類方法更多的異常。但可以丟擲比父類更少的異常,或不丟擲異常。4.方法覆蓋只存在...
java 方法的覆蓋
1.運用場景 假如有100個類,分別為sub1,sub2,sub3,它們的乙個共同行為是寫字,除了sub1類用腳寫字以外,其餘的類都用手寫字。我們可以抽象出乙個父類base,它有乙個方法write 表示寫字,為了提高 可重用性,write 應該採用大多數子類的實現方式。定義父類如下 public v...
java方法的覆蓋
方法覆蓋,從字面就可以知道,它是覆蓋了乙個方法並且對其重寫,以求達到不同的作用。對我們來說最熟悉的覆蓋就是對介面方法的實現,在介面中一般只是對方法進行了宣告,而我們在實現時,就需要實現介面宣告的所有方法。除了這個典型的用法以外,我們在繼承中也可能會在子類覆蓋父類中的方法。在覆蓋要注意以下的幾點 1 ...