淺談Java中的重載,重寫,多態(tài),靜態(tài)綁定、動態(tài)綁定
本文主要研究的是關(guān)于Java中重載,重寫,多態(tài),靜態(tài)綁定、動態(tài)綁定的相關(guān)內(nèi)容,具體如下。
重載,英文名是overload,是指在一個類中定義了一個以上具有相同名稱的方法,這些方法的參數(shù)個數(shù)、參數(shù)類型和順序不能相同。返回類型可以相同,也可以不同。
public class TstaticOverload {
static int height;
TstaticOverload() {
System.out.println ("Planting a seedling");
height = 0;
}
TstaticOverload(int initialHeight) {
height = initialHeight;
System.out.println("Creating new Tree that is "+ height + " feet tall");
}
static void info() {
System.out.println("Tree is " + height + " feet tall");
}
static void info(String s) {
System.out.println(s + ": Tree is " + height + " feet tall");
}
}
public class testSO {
public static void main (String [] args) {
TstaticOverload t = new TstaticOverload(5);
TstaticOverload.info();
TstaticOverload.info("overloading method");
new TstaticOverload();
}
}
out: Creating new Tree that is 5 feet tall Tree is 5 feet tall overloading method: Tree is 5 feet tall Planting a seedling
重寫,英文名是override,是指在繼承情況下,子類中定義了與其基類中方法具有相同名稱、相同返回類型或兼容類型和相同參數(shù)的方法,就叫做子類把基類的方法重寫了。這是實(shí)現(xiàn)多態(tài)必須的步驟。
多態(tài):多態(tài)是同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力。
public class StaticSupper {
public static String staticGet() {
return "Base staticGet()";
}
public String dynamicGet() {
return "Base dynamicGet()";
}
}
class StaticSub extends StaticSupper {
public static String staticGet() {
return "Sub staticGet()";
}
public String dynamicGet() {
return "Sub dynamicGet()";
}
}
class StaticMub extends StaticSupper {
public static String staticGet() {
return "Mub staticGet()";
}
public String dynamicGet() {
return "Mub dynamicGet()";
}
}
public class StaticPolymorphism {
public static void main (String [] args) {
StaticSupper sup1 = new StaticSub();
System.out.println(sup1.staticGet());
System.out.println(sup1.dynamicGet());
StaticSupper sup2 = new StaticMub();
System.out.println(sup2.staticGet());
System.out.println(sup2.dynamicGet());
}
}
out: Base staticGet() Sub dynamicGet() Base staticGet() Mub dynamicGet()
程序綁定的概念:
綁定指的是一個方法的調(diào)用與方法所在的類(方法主體)關(guān)聯(lián)起來。對java來說,綁定分為靜態(tài)綁定和動態(tài)綁定;或者叫做前期綁定和后期綁定。
靜態(tài)綁定:
在程序執(zhí)行前方法已經(jīng)被綁定,此時由編譯器或其它連接程序?qū)崿F(xiàn)。例如:C。
針對Java簡單的可以理解為程序編譯期的綁定;這里特別說明一點(diǎn),java當(dāng)中的方法只有final,static,private和構(gòu)造方法是前期綁定。
動態(tài)綁定:
后期綁定:動態(tài)綁定是指編譯器在編譯階段不知道要調(diào)用哪個方法,直到運(yùn)行時根據(jù)具體對象的類型進(jìn)行綁定。
若一種語言實(shí)現(xiàn)了后期綁定,同時必須提供一些機(jī)制,可在運(yùn)行期間判斷對象的類型,并分別調(diào)用適當(dāng)?shù)姆椒?。也就是說,編譯器此時依然不知道對象的類型,但方法調(diào)用機(jī)制能自己去調(diào)查,找到正確的方法主體。不同的語言對后期綁定的實(shí)現(xiàn)方法是有所區(qū)別的。但我們至少可以這樣認(rèn)為:它們都要在對象中安插某些特殊類型的信息。
方法重載有靜態(tài)方法重載和普通方法重載。靜態(tài)方法重載是靜態(tài)綁定,方法調(diào)用是通過:類名.方法。普通方法重載是動態(tài)綁定,方法調(diào)用是通過:實(shí)例對象引用.方法。構(gòu)造器能夠重載,但是不能夠被重寫。
靜態(tài)方法能夠被重寫,但是沒有實(shí)現(xiàn)多態(tài)效果。
總結(jié)
以上就是本文關(guān)于淺談Java中的重載,重寫,多態(tài),靜態(tài)綁定、動態(tài)綁定的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關(guān)文章
Mybatis-plus foreach拼接字符串查詢無數(shù)據(jù)返回問題
這篇文章主要介紹了Mybatis-plus foreach拼接字符串查詢無數(shù)據(jù)返回問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
Springboot集成任務(wù)調(diào)度實(shí)現(xiàn)過程
這篇文章主要介紹了Springboot集成任務(wù)調(diào)度實(shí)現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04
Java運(yùn)行時動態(tài)生成對象的方法小結(jié)
Java是一門靜態(tài)語言,通常,我們需要的class在編譯的時候就已經(jīng)生成了,為什么有時候我們還想在運(yùn)行時動態(tài)生成class呢?今天通過本文給大家分享Java運(yùn)行時動態(tài)生成對象的方法小結(jié),需要的朋友參考下吧2021-08-08
Java子線程無法獲取Attributes的解決方法(最新推薦)
在Java多線程編程中,子線程無法直接獲取主線程設(shè)置的Attributes是一個常見問題,本文探討了這一問題的原因,并提供了兩種解決方案,對Java子線程無法獲取Attributes的解決方案感興趣的朋友一起看看吧2025-01-01
一個注解搞定Spring Security基于Oauth2的SSO單點(diǎn)登錄功能
本文主要介紹 同域 和 跨域 兩種不同場景單點(diǎn)登錄的實(shí)現(xiàn)原理,并使用 Spring Security 來實(shí)現(xiàn)一個最簡單的跨域 SSO客戶端。對Spring Security基于Oauth2的SSO單點(diǎn)登錄功能感興趣的朋友一起看看吧2021-09-09
maven install報錯中程序包xxx不存在的問題解決
本文主要介紹了maven install報錯中程序包xxx不存在的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05

