国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Java基礎(chǔ)教程】(十四)面向?qū)ο笃?· 第八講:多態(tài)性詳解——向上及向下轉(zhuǎn)型、關(guān)鍵字 final與 instanceof的作用~

這篇具有很好參考價(jià)值的文章主要介紹了【Java基礎(chǔ)教程】(十四)面向?qū)ο笃?· 第八講:多態(tài)性詳解——向上及向下轉(zhuǎn)型、關(guān)鍵字 final與 instanceof的作用~。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【Java基礎(chǔ)教程】(十四)面向?qū)ο笃?· 第八講:多態(tài)性詳解——向上及向下轉(zhuǎn)型、關(guān)鍵字 final與 instanceof的作用~,# Java基礎(chǔ)教程,java,開發(fā)語言,jvm,經(jīng)驗(yàn)分享,java-ee,后端

本節(jié)學(xué)習(xí)目標(biāo)

  • 掌握final 關(guān)鍵字的主要作用及使用;
  • 掌握對(duì)象多態(tài)性的概念以及對(duì)象轉(zhuǎn)型的操作;
  • 掌握instanceof 關(guān)鍵字的主要作用及使用;

1?? final 關(guān)鍵字

在Java 中 final稱為終結(jié)器,在Java 里面可以使用 final定義類、方法和屬性,用于表示不可變性。

  • final類:當(dāng)一個(gè)類被聲明為final時(shí),意味著該類不能被繼承。換句話說,不能創(chuàng)建該類的子類。通常將類聲明為final的主要原因是防止其他類修改或擴(kuò)展該類的行為。例如,java.lang.String就是一個(gè)被聲明為final的類;
  • final方法:當(dāng)一個(gè)方法被聲明為final時(shí),意味著該方法不能被子類重寫或覆蓋。這種限制可以保護(hù)方法的實(shí)現(xiàn),確保不會(huì)被修改。通常情況下,一個(gè)方法被聲明為final是因?yàn)樗膶?shí)現(xiàn)在父類中已經(jīng)足夠完善,不希望子類對(duì)其進(jìn)行修改;
  • final變量:當(dāng)一個(gè)變量被聲明為final時(shí),意味著該變量的值不能被更改。一旦給final變量賦值,就不能再修改它的值。通常將變量聲明為final是為了防止其被重新分配或重新賦值,保持其不可變性。final變量可以是基本類型(如int、double等)或引用類型(如對(duì)象、數(shù)組引用等),但引用類型的final變量指的是不能被重新分配,即不能再指向其他對(duì)象,但仍然可以修改對(duì)象的狀態(tài)。

使用final關(guān)鍵字可以帶來以下好處:

  • 提高性能:final關(guān)鍵字可以使編譯器進(jìn)行優(yōu)化,因?yàn)樗肋@些元素不會(huì)被改變,所以可以進(jìn)行一些優(yōu)化處理。
  • 增加安全性:final關(guān)鍵字可以防止意外修改或覆蓋。當(dāng)某個(gè)類、方法或變量對(duì)于某種場(chǎng)景下應(yīng)該保持固定不變時(shí),使用final可以提供更強(qiáng)的安全性和可靠性。
  • 支持設(shè)計(jì)決策:通過將類、方法或變量聲明為final,可以明確表達(dá)出它們?cè)谠O(shè)計(jì)中的意圖和限制。

1.1 final類

使用 final 定義的類不能再有子類,即:任何類都不能繼承以 final 聲明的父類。

//	范例 1: 觀察 final 定義的類
final class A{}       // 此類不能夠有子類

class B extends A{}  	// 錯(cuò)誤的繼承

此程序中由于 A 類在定義時(shí)使用了 final關(guān)鍵字,這樣 A 就不能再有子類了,所以當(dāng) B 類繼承 A 類時(shí)會(huì)在編譯時(shí)出現(xiàn)語法錯(cuò)誤。

需要注意的是,只是進(jìn)行應(yīng)用開發(fā)的話,那么大部分情況下不需要使用 final 來定義類。而如果是一些系統(tǒng)架構(gòu)的代碼開發(fā)時(shí),才有可能會(huì)使用到這樣的代碼。同時(shí)要注意一點(diǎn):String也是使用 final 定義的類,所以String類不允許被繼承。

1.2 final方法

使用 final 定義的方法不能被子類所覆寫。 在一些時(shí)候由于父類中的某些方法具備一些重要的特征,并且這些特征不希望被子類破壞(不能夠覆寫), 就可以在方法的聲明處加上final, 意思是子類不要去破壞這個(gè)方法的原本作用。

//	范例 2: 觀察 final 定義方法
class A{
	public final void fun(){}  // 此方法不允許子類覆寫
}

class B extends A{
	public void fun(){}			//錯(cuò)誤:此處不允許覆寫
}

此程序在 A 類中定義的 fun()方法上使用了final進(jìn)行定義,這就意味著子類在繼承 A 類后將不允許覆寫 fun()方法。

1.3 final屬性

使用 final定義的變量就成為了常量,常量必須在定義的時(shí)候設(shè)置好內(nèi)容,并且不能修改。

//	范例 3: 定義常量
class A{
	final double GOOD = 100.0;	//GOOD級(jí)別就是100.0

	public final void fun(){
		GOOD = 1.1;                          //錯(cuò)誤:不能夠修改常量
	}
}

此程序使用 final 定義了一個(gè)常量 “GOOD”, 這就相當(dāng)于利用 “GOOD” 這個(gè)名稱代表了“100.0” 這個(gè)數(shù)據(jù)。所以代碼中定義常量的最大意義在于:使用常量可以利用字符串(常量名稱)來更直觀地描述數(shù)據(jù)。

大家可以發(fā)現(xiàn)本處定義的常量名稱使用了全部字母大寫的形式(final double GOOD =100.0;),這是Java中的命名規(guī)范要求,這樣做的好處是可以明確地與變量名稱進(jìn)行區(qū)分,開發(fā)中也應(yīng)該遵守。

而在定義常量中還有一個(gè)更為重要的概念 — — 全局常量,所謂全局常量指的就是使用了"public"、“static”、“final”3個(gè)關(guān)鍵字聯(lián)合定義的常量,例如:

public static final String MSG = "小山";

static 修飾的數(shù)據(jù)保存在公共數(shù)據(jù)區(qū),所以此處的常量就是一個(gè)公共常量。同時(shí)一定要記住,在定義常量時(shí)必須對(duì)其進(jìn)行初始化賦值,否則將出現(xiàn)語法錯(cuò)誤。

2?? 多態(tài)性

前面文章中已經(jīng)詳細(xì)解析了面向?qū)ο蟮姆庋b性、繼承性兩大特征,而多態(tài)是面向?qū)ο蟮淖詈笠粋€(gè)主要特征,也是一個(gè)非常重要的特性,掌握了多態(tài)性才可以編寫出更加合理的面向?qū)ο蟪绦?。而多態(tài)性在開發(fā)中可以體現(xiàn)在以下兩個(gè)方面:

  • 方法的多態(tài)性:重載與覆寫;

    • 方法重載:同一個(gè)方法名稱,根據(jù)不同的參數(shù)類型及個(gè)數(shù)可以完成不同的功能;
    • 方法覆寫:同一個(gè)方法,根據(jù)實(shí)例化的子類對(duì)象不同,所完成的功能也不同。
  • 對(duì)象的多態(tài)性:父子類對(duì)象的轉(zhuǎn)換。

    • 向上轉(zhuǎn)型:子類對(duì)象變?yōu)楦割悓?duì)象,格式:父類 父類對(duì)象 = 子類實(shí)例,自動(dòng)類型轉(zhuǎn)換;
    • 向下轉(zhuǎn)型:父類對(duì)象變?yōu)樽宇悓?duì)象,格式:子類 子類對(duì)象 = (子類) 父類實(shí)例,強(qiáng)制類型轉(zhuǎn)換。

對(duì)于方法的多態(tài)性在之前已經(jīng)有了詳細(xì)地闡述,所以本節(jié)主要介紹對(duì)象多態(tài)性,有一點(diǎn)需要注意的是,對(duì)象多態(tài)性和方法覆寫是緊密聯(lián)系在一起的。

當(dāng)然,要想真正理解多態(tài)性是如何去應(yīng)用的,多態(tài)性更合理的解釋需要結(jié)合抽象類與接口來一起講解,下一篇文章將會(huì)為大家介紹抽象類與接口等知識(shí),而要想充分理解這一概念也需要更多時(shí)間的了解與沉淀。

//	范例 4: 觀察如下程序
class A{
	public void print(){
		System.out.println("A 、public void print(){}");
	}
}

class B extends A{
	public void print(){  //  此時(shí)子類覆寫了父類中的print()方法
		System.out.println("B 、public void print(){}");
	}
}

public class TestDemo {
	public static void main(String args[]){
		B b = new B();                       //實(shí)例化的是子類對(duì)象
		b.print();                                  //調(diào)用被子類覆寫過的方法
	}
}

程序執(zhí)行結(jié)果:

B 、public void print(){}

此程序在方法覆寫中已經(jīng)講解過了,由于現(xiàn)在子類B 覆寫了A 類中的 print(), 并且在主方法中實(shí)例化的是子類對(duì)象,這樣當(dāng)調(diào)用 print()方法時(shí)調(diào)用的一定是已經(jīng)被覆寫過的方法。也就是說在本程序中需要觀察以下兩點(diǎn)。
(1)觀察實(shí)例化的是哪個(gè)類的對(duì)象:“new B()”;
(2)觀察調(diào)用的方法是否被子類所覆寫,如果覆寫了,則調(diào)用被覆寫過的方法,否則調(diào)用父類方法。

2.1 向上轉(zhuǎn)型

那么這樣的概念與對(duì)象的多態(tài)性有什么關(guān)聯(lián)呢?下面對(duì)上邊案例的主方法進(jìn)行一些變更,以觀察對(duì)象的向上轉(zhuǎn)型操作。

//	范例 5: 對(duì)象向上轉(zhuǎn)型(自動(dòng)完成)
public class TestDemo {
	public static void main(String args[]){
		A a = new B();  // 實(shí)例化的是子類對(duì)象,對(duì)象向上轉(zhuǎn)型
		a.print();     	//調(diào)用被子類覆寫過的方法
	}
}

程序執(zhí)行結(jié)果:

B 、public void print(){}

可以看到此程序的執(zhí)行結(jié)果與范例4 的程序執(zhí)行結(jié)果沒有任何區(qū)別,然而在本程序中發(fā)生了對(duì)象的向上轉(zhuǎn)型操作 (A a = new B();),并且最終由父類對(duì)象調(diào)用了 print() 方法,但是最終的執(zhí)行結(jié)果卻是被子類所覆寫過的方法的執(zhí)行結(jié)果。

而產(chǎn)生這樣結(jié)果的原因也很好理解,在范例4 中已經(jīng)重點(diǎn)強(qiáng)調(diào)過:根據(jù)實(shí)例化對(duì)象所在類是否覆寫了父類中的方法來決定最終執(zhí)行,此程序?qū)嵗氖亲宇悓?duì)象 (new B()),并且 print() 方法又被子類覆寫了,那么最終所調(diào)用的一定是被覆寫過的方法。

實(shí)際上通過此程序大家可以發(fā)現(xiàn)對(duì)象向上轉(zhuǎn)型的特點(diǎn),整個(gè)操作中根本不需要關(guān)心對(duì)象的聲明類型,關(guān)鍵在于實(shí)例化新對(duì)象時(shí)所調(diào)用的是哪個(gè)子類的構(gòu)造,如果方法被子類所覆寫,調(diào)用的就是被覆寫過的方法,否則就調(diào)用父類中定義的方法。這一點(diǎn)與方法覆寫的執(zhí)行原則是完全一樣的。

2.2 向下轉(zhuǎn)型

在清楚了對(duì)象的向上轉(zhuǎn)型操作及特點(diǎn)后,下面再來觀察對(duì)象的向下轉(zhuǎn)型操作。

//	范例 6: 對(duì)象向下轉(zhuǎn)型
public class TestDemo {
	public static void main(String args[]){
		A a = new B();		//實(shí)例化的是子類對(duì)象,對(duì)象向上轉(zhuǎn)型 
		B b = (B) a;		//對(duì)象需要強(qiáng)制性地向下轉(zhuǎn)型
		b.print();			//調(diào)用被子類覆寫過的方法
	}
}

程序執(zhí)行結(jié)果:

B 、public void print(){}

此程序首先利用對(duì)象的向上轉(zhuǎn)型實(shí)例化了父類A 的對(duì)象,然后將此對(duì)象進(jìn)行向下轉(zhuǎn)型為子類 B 的對(duì)象,由于整個(gè)代碼中關(guān)鍵字 new 調(diào)用的是子類 B 的構(gòu)造 (new B()),所以調(diào)用的是被子類 B 所覆寫的 print() 方法。

因?yàn)橛袕?qiáng)制性轉(zhuǎn)換的操作,所以向下轉(zhuǎn)型操作本身是有前提條件的,即必須發(fā)生向上轉(zhuǎn)型后才可以發(fā)生向下轉(zhuǎn)型。如果是兩個(gè)沒有關(guān)系的類對(duì)象發(fā)生強(qiáng)制轉(zhuǎn)換,就會(huì)出現(xiàn) “ClassCastException” 異常。

//	范例 7: 錯(cuò)誤的轉(zhuǎn)型操作
public class TestDemo {
	public static void main(String args[]){
		A a = new A(); 		//直接實(shí)例化對(duì)象, 此時(shí)并沒有發(fā)生子類對(duì)象向上轉(zhuǎn)型的操作,所以強(qiáng)制轉(zhuǎn)型會(huì)帶來安全隱患
		B b = (B)a;      	//強(qiáng)制向下轉(zhuǎn)型,此處產(chǎn)生“ClassCastException”異常
		b.print();          //此語句無法執(zhí)行
	}
}

程序執(zhí)行結(jié)果:

Exception in thread "main" java.lang.ClassCastException: A cannot be cast to B at TestDemo.main(TestDemo.java:29)

本程序出現(xiàn)的異常表示的是類轉(zhuǎn)換異常,指的是兩個(gè)沒有關(guān)系的類對(duì)象強(qiáng)制發(fā)生轉(zhuǎn)型時(shí)所帶來的異常。因?yàn)榇藭r(shí)并沒有發(fā)生向上轉(zhuǎn)型,所以向下轉(zhuǎn)型是會(huì)存在安全隱患的,開發(fā)中應(yīng)該盡量避免此類操作。

對(duì)象多態(tài)性的本質(zhì)是根據(jù)實(shí)例化對(duì)象所在的類是否覆寫了父類中的指定方法來決定最終執(zhí)行的方法體,那么這種向上或向下的對(duì)象轉(zhuǎn)型有什么意義呢?

在實(shí)際開發(fā)中,對(duì)象向上轉(zhuǎn)型的主要意義在于參數(shù)的統(tǒng)一,也是最為重要的用法,而對(duì)象的向下轉(zhuǎn)型指的是調(diào)用子類的個(gè)性化操作方法。

//	范例 8: 對(duì)象向上轉(zhuǎn)型作用分析
class A {
	public void print(){
		System.out.println("A、public void print(){}");
	}
}

class B extends A{    //定義A的子類
	public void print(){	//此時(shí)子類覆寫了父類中的print()方法
		System.out.println("B、public void print(){}");
	}
}

class C extends A {    //定義A的子類
	public void print(){	//此時(shí)子類覆寫了父類中的print()方法
		System.out.println("C、public void print(){}");
	}
}

public class TestDemo {
	public static void main(String args[]){
		fun(new B());    //對(duì)象向上轉(zhuǎn)型,等價(jià)于:A a=new B();
		fun(new C());    //對(duì)象向上轉(zhuǎn)型,等價(jià)于:A a=new C();
	}
	
	/**
	* 接收A類或其子類對(duì)象,不管傳遞哪個(gè)對(duì)象都要求調(diào)用print()方法
	* @param a A類實(shí)例化對(duì)象
	*/
	public static void fun(A a)(
		a.print();
	}
}

程序執(zhí)行結(jié)果:

B、public void print(){}
C、public void print(){}

在此程序的 fun() 方法上只是接收了一個(gè) A 類的實(shí)例化對(duì)象,按照對(duì)象的向上轉(zhuǎn)型原則,此時(shí)的 fun() 方法可以接收 A類對(duì)象或所有A類的子類對(duì)象,這樣只需要一個(gè)A類的參數(shù)類型,此方法就可以處理一切 A的子類對(duì)象 (即便A類有幾百萬個(gè)子類,fun() 方法依然可以接收及處理 )。 而在 fun() 方法中將統(tǒng)一調(diào)用 print() 方法,如果此時(shí)傳遞的是子類對(duì)象,并且覆寫過 print()方法,就表示執(zhí)行被子類所覆寫過的方法。

如果說向上轉(zhuǎn)型是統(tǒng)一調(diào)用的參數(shù)類型,那么向下轉(zhuǎn)型就表示要執(zhí)行子類的個(gè)性化操作方法。實(shí)際上當(dāng)發(fā)生繼承關(guān)系后,父類對(duì)象可以使用的方法必須在父類中明確定義,例如:此時(shí)在父類中存在一個(gè) print() 方法,哪怕這時(shí)此方法被子類覆寫過,父類對(duì)象依然可以調(diào)用。但是如果子類要擴(kuò)充一個(gè) funB()方法,這個(gè)方法父類對(duì)象并不知道, 一旦發(fā)生向 上轉(zhuǎn)型,那么 funB()方法父類對(duì)象肯定無法使用。

//	范例 9: 子類擴(kuò)充父類方法
class A{
	public void print(){
		System.out.println("A、public void print(){}");
	}
}

class B extends A{  //定義A的子類
	public void print(){	//此時(shí)子類覆寫了父類中的print()方法
		System.out.println("B、public void print(){}");
	}
	
	/**
	* 在子類中擴(kuò)充一個(gè)新的方法,但是此方法只能由子類對(duì)象調(diào)用,父類對(duì)象不能調(diào)用 
	*/
	public void funB(){
		System.out.println("B、擴(kuò)充的funB()方法");
	}
}

此程序在子類B中定義的 funB() 方法在子類對(duì)象發(fā)生向上轉(zhuǎn)型時(shí)( A a = new B();),父類對(duì)象將無法調(diào)用,也就是說這個(gè)方法是子類自己的特殊功能,并沒有在父類中定義,如果此時(shí)要想調(diào)用子類中的方法,就必須將父類對(duì)象向下轉(zhuǎn)型。

//	范例 10: 向下轉(zhuǎn)型,調(diào)用子類中的特殊功能
public class TestDemo {
	public static void main(String args[]){
		fun(new B());//向上轉(zhuǎn)型,只能調(diào)用父類中定義的方法
	}
	public static void fun(A a){
		B b = (B)a;  //要調(diào)用子類的特殊操作,需要向下轉(zhuǎn)型
		b.funB();    //調(diào)用子類的擴(kuò)充方法
	}
}

程序執(zhí)行結(jié)果:

B、擴(kuò)充的funB()方法

此程序如果要調(diào)用 fun()方法,則子類B的實(shí)例化對(duì)象一定要發(fā)生向上轉(zhuǎn)型操作,但是這個(gè)時(shí)候父類對(duì)象無法調(diào)用子類BfunB()方法,所以需要進(jìn)行向下轉(zhuǎn)型才能正常調(diào)用 funB()方法。但是如果每一個(gè)子類都去大量擴(kuò)充自己的新功能,這樣就會(huì)嚴(yán)重破環(huán)開發(fā)的參數(shù)統(tǒng)一性,所以方法應(yīng)該以父類為主,子類可以覆寫父類方法,但盡量不要擴(kuò)充新的方法。

通過以上所有分析可以發(fā)現(xiàn)如下特點(diǎn):
向上轉(zhuǎn)型:其目的是參數(shù)的統(tǒng)一,但是向上轉(zhuǎn)型中,通過子類實(shí)例化后的父類對(duì)象所能調(diào)用的方法只能是父類中定義過的方法;
向下轉(zhuǎn)型:其目的是父類對(duì)象要調(diào)用實(shí)例化它的子類中的特殊方法,但是向下轉(zhuǎn)型是需要強(qiáng)制轉(zhuǎn)換的,這樣的操作容易帶來安全隱患。

以個(gè)人經(jīng)驗(yàn)來說,對(duì)于對(duì)象的轉(zhuǎn)型,實(shí)際上 80%的情況下都只會(huì)使用向上轉(zhuǎn)型,因?yàn)榭梢缘玫絽?shù)類型的統(tǒng)一,方便于程序設(shè)計(jì);并且子類定義的方法大部分情況下應(yīng)該以父類的方法名稱為標(biāo)準(zhǔn)進(jìn)行覆寫,而不要過多地?cái)U(kuò)充方法。5% 的情況下會(huì)使用向下轉(zhuǎn)型,目的是調(diào)用子類的特殊方法。還有15%的情況下是不轉(zhuǎn)型,例如:String。

2.3 關(guān)鍵字 instanceof

為了保證轉(zhuǎn)型的順利進(jìn)行,Java 提供了一個(gè)關(guān)鍵字:instanceof,利用此關(guān)鍵字可以判斷某一個(gè)對(duì)象是否是指定類的實(shí)例,使用格式如下。

//	返回boolean型
對(duì)象 instanceof

如果某個(gè)對(duì)象是某個(gè)類的實(shí)例,就返回 true, 否則返回 false

//	范例 11: 使用instanceof 判斷
public class TestDemo  {
	public  static void main(String  args[]){
		A a = new B();               //對(duì)象向上轉(zhuǎn)型
		System.out.println(a instanceof A);
		System.out.println(a instanceof B);
		System.out.println(null instanceof A);
	}
}

程序執(zhí)行結(jié)果:

true
true
false

此程序利用 instanceof 判斷了某個(gè)對(duì)象是否是指定類的實(shí)例,通過程序的執(zhí)行結(jié)果可以發(fā)現(xiàn) a 對(duì)象由于采用了向上轉(zhuǎn)型進(jìn)行實(shí)例化操作,所以 aA 類或 B類的實(shí)例化對(duì)象,而 null 在使用 instanceof 判斷時(shí)返回的結(jié)果為 false。

既然 instanceof 關(guān)鍵字可以準(zhǔn)確地判斷出實(shí)例化對(duì)象與類的關(guān)系,那么就可以在進(jìn)行對(duì)象強(qiáng)制轉(zhuǎn)換前進(jìn)行判斷,以保證安全可靠的向下轉(zhuǎn)型操作。

從實(shí)際的開發(fā)來講,向下轉(zhuǎn)型的操作幾乎是很少見到的,但是如果真的出現(xiàn)了,并且開發(fā)者不確定此操作是否安全時(shí),一定要先使用instanceof 關(guān)鍵字判斷。

//	范例 12: 使用 instanceof  判斷
class A{
	public void print(){
		System.out.println("A、public void print(){}");
	}
}

class B extends A{                         //定義A 的子類
	public void print(){               //此時(shí)子類覆寫了父類中的print()方法
		System.out.println("B、public void print(){}");
	}
	public void funB(){
		System.out.println("B、擴(kuò)充的funB()方法");
	}
}

public class TestDemo {
	public static void main(String args[]){
		fun(new B());
	}
	public static void fun(A a){ //對(duì)象向上轉(zhuǎn)型
		a.print();
		if (a instanceof B){ //如果 a 對(duì)象是B 類的實(shí)例
			B b= (B)a;		//向下轉(zhuǎn)型
			b.funB();		//調(diào)用子類擴(kuò)充的方法
		}
	}
}

程序執(zhí)行結(jié)果:

B、public void print(){}
B、擴(kuò)充的funB()方法

在此程序中為了保證安全的向下轉(zhuǎn)型操作,在將父類轉(zhuǎn)換為子類對(duì)象時(shí)首先使用了 instanceof 進(jìn)行判斷,如果當(dāng)前對(duì)象是子類實(shí)例,則進(jìn)行強(qiáng)制轉(zhuǎn)換,以調(diào)用子類的擴(kuò)充方法。

?? 總結(jié)

在本文中我們學(xué)習(xí)了Java中兩個(gè)重要的概念:final關(guān)鍵字和多態(tài)性。

首先,我們了解到final關(guān)鍵字可以應(yīng)用于類、方法和屬性。final類表示不可繼承,final方法表示不可覆蓋,而final屬性表示不可修改。使用final關(guān)鍵字可以提高代碼的安全性和性能,并明確表達(dá)設(shè)計(jì)意圖。

其次,我們探討了多態(tài)性的概念。多態(tài)性是面向?qū)ο缶幊痰闹匾匦裕渲邪ㄏ蛏限D(zhuǎn)型、向下轉(zhuǎn)型和關(guān)鍵字instanceof。通過向上轉(zhuǎn)型,我們可以實(shí)現(xiàn)參數(shù)的統(tǒng)一和代碼的靈活性。而向下轉(zhuǎn)型則允許調(diào)用子類的個(gè)性化操作方法。關(guān)鍵字instanceof則可用于檢查對(duì)象是否屬于某個(gè)類或其子類的實(shí)例。

理解final關(guān)鍵字和多態(tài)性對(duì)于Java開發(fā)至關(guān)重要。它們能幫助我們?cè)O(shè)計(jì)更安全、靈活且易于維護(hù)的代碼。合理運(yùn)用final關(guān)鍵字,可以防止不必要的修改和繼承;深入理解多態(tài)性,可以提高代碼的可擴(kuò)展性和可復(fù)用性。

最后,我們需要注意在使用final關(guān)鍵字時(shí)要謹(jǐn)慎,并根據(jù)具體需求進(jìn)行選擇。同時(shí),熟練掌握多態(tài)性的概念和技巧,有助于編寫更具有彈性和適應(yīng)性的代碼。


? 溫習(xí)回顧上一篇(點(diǎn)擊跳轉(zhuǎn))《【Java基礎(chǔ)教程】(十三)面向?qū)ο笃?· 第七講:繼承性詳解——繼承概念及其限制,方法覆寫和屬性覆蓋,關(guān)鍵字super的魔力~》

? 繼續(xù)閱讀下一篇(點(diǎn)擊跳轉(zhuǎn))《【Java基礎(chǔ)教程】(十五)面向?qū)ο笃?· 第九講:抽象類和接口——定義、限制與應(yīng)用的細(xì)節(jié),初窺模板設(shè)計(jì)模式、工廠設(shè)計(jì)模式與代理設(shè)計(jì)模式~》
文章來源地址http://www.zghlxwxcb.cn/news/detail-568674.html

【Java基礎(chǔ)教程】(十四)面向?qū)ο笃?· 第八講:多態(tài)性詳解——向上及向下轉(zhuǎn)型、關(guān)鍵字 final與 instanceof的作用~,# Java基礎(chǔ)教程,java,開發(fā)語言,jvm,經(jīng)驗(yàn)分享,java-ee,后端

到了這里,關(guān)于【Java基礎(chǔ)教程】(十四)面向?qū)ο笃?· 第八講:多態(tài)性詳解——向上及向下轉(zhuǎn)型、關(guān)鍵字 final與 instanceof的作用~的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包