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

