- 相關(guān)推薦
Java方法繼承、重載和覆蓋總結(jié)
Java 平臺(tái)是基于 Java 語言的平臺(tái)。這樣的平臺(tái)非常流行。因此微軟公司推出了與之競爭的.NET平臺(tái)以及模仿Java的C#語言。下面文章介紹了Java方法繼承、重載、覆蓋總結(jié):
1、方法繼承:
利用extends關(guān)鍵字一個(gè)方法繼承另一個(gè)方法,而且只能直接繼承一個(gè)類。
* 當(dāng)Sub類和Base類在同一個(gè)包時(shí)Sub類繼承Base類中的public/protected/默認(rèn)級(jí)別的變量個(gè)方法
* 在不同包時(shí)繼承public/protected級(jí)別的變量和方法。
2、方法重載:
如果有兩個(gè)方法的方法名相同,但參數(shù)不一致,哪么可以說一個(gè)方法是另一個(gè)方法的重載。
* 方法名相同
* 方法的參數(shù)類型,個(gè)數(shù)順序至少有一項(xiàng)不同
* 方法的返回類型可以不相同
* 方法的修飾符可以不相同
* main方法也可以被重載
3、方法覆蓋:
如果在子類中定義一個(gè)方法,其名稱、返回類型及參數(shù)簽名正好與父類中某個(gè)方法的名稱、返回類型及參數(shù)簽名相匹配,那么可以說,子類的方法覆蓋了父類的方法。
* 子類的方法名稱返回類型及參數(shù)簽名 必須與父類的一致
* 子類方法不能縮小父類方法的訪問權(quán)限
* 子類方法不能拋出比父類方法更多的異常
* 方法覆蓋只存在于子類和父類之間,同一個(gè)類中只能重載
* 父類的靜態(tài)方法不能被子類覆蓋為非靜態(tài)方法
* 子類可以定義于父類的靜態(tài)方法同名的靜態(tài)方法,以便在子類中隱藏父類的靜態(tài)方法(滿足覆蓋約束), 而且Java虛擬機(jī)把靜態(tài)方法和所屬的類綁定,而把實(shí)例方法和所屬的實(shí)例綁定。
* 父類的非靜態(tài)方法不能被子類覆蓋為靜態(tài)方法
* 父類的私有方法不能被子類覆蓋
* 父類的抽象方法可以被子類通過兩種途徑覆蓋(即實(shí)現(xiàn)和覆蓋)(P169)
* 父類的非抽象方法可以被覆蓋為抽象方法
4、Super關(guān)鍵字:
super和this關(guān)鍵字都可以用來覆蓋Java語言的默認(rèn)作用域,使被屏蔽的方法或變量變?yōu)榭梢?三種情況下的不可見 P171)。
* 父類的成員變量和方法為private使用super訪問編譯出錯(cuò)
* 在類的構(gòu)造方法種,通過super語句調(diào)用這個(gè)類的父類的構(gòu)造方法
* 在子類種訪問父類的被屏蔽的方法和屬性
* 只能在構(gòu)造方法或?qū)嵗椒▋?nèi)使用super關(guān)鍵字,而在靜態(tài)方法和靜態(tài)代碼塊內(nèi)不能使用super
5、多態(tài):
* 對于一個(gè)引用類型的變量,Java編譯器按照它的聲明的類型來處理
* 對于一個(gè)引用類型的變量,運(yùn)行時(shí)Java虛擬機(jī)按照它的實(shí)際引用的對象來處理
* 運(yùn)行時(shí)環(huán)境中,通過引用類型變量來訪問所引用對象的方法和屬性時(shí),Java虛擬機(jī)采用以下綁定規(guī)則
1)實(shí)例方法與引用變量實(shí)際引用的對象的方法綁定,屬于動(dòng)態(tài)綁定
2)靜態(tài)方法與引用變量所聲明的類型的方法綁定,屬于靜態(tài)綁定
3)成員變量(包括靜態(tài)和實(shí)例變量)與引用變量所聲明的類型的成員變量綁定,屬于靜態(tài)綁定
Java代碼
class Super {
static int stat = 1;
int nonStat = 2;
static int statMethod(){
return 3;
}
int nonStatMethod(){
return 4;
}
}
public class Sub extends Super {
static int stat = 10;
int nonStat = 20;
static int statMethod(){
return 30;
}
int nonStatMethod(){
return 40;
}
public static void main(String args) {
Super s = new Sub();
System.out.println("Static is " + s.stat);
System.out.println("Non-Static is " + s.nonStat);
System.out.println("Static method is " + s.statMethod() );
System.out.println("Non-Static method is " + s.nonStatMethod() );
Sub sub = (Sub)s;
System.out.println("Static is " + sub.stat);
System.out.println("Non-Static is " + sub.nonStat);
System.out.println("Static method is " + sub.statMethod() );
System.out.println("Non-Static method is " + sub.nonStatMethod() );
}
}
輸出結(jié)果:
Static is 1
Non-Static is 2
Static method is 3
Non-Static method is 40
Static is 10
Non-Static is 20
Static method is 30
Non-Static method is 40
【Java方法繼承、重載和覆蓋總結(jié)】相關(guān)文章:
Java中日期的處理方法03-09
java實(shí)現(xiàn)web服務(wù)器的方法03-30
Java語言的特點(diǎn)和實(shí)現(xiàn)機(jī)制02-27
Java的接口和抽象類03-29
關(guān)于Java中Queue和BlockingQueue的區(qū)別06-06
PHP面向?qū)ο笾剌d重寫的不同04-03
java中continue跳轉(zhuǎn)語句使用方法03-29