最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java之理解多態(tài)詳解

 更新時間:2021年12月19日 10:18:45   作者:real_xyttttt  
大家好,本篇文章主要講的是Java之理解多態(tài)詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽

一、多態(tài)的概念

? ? ? ?繼承關系使一個子類能繼承父類的特征,并且附加一些新特征。子類是它的父類的特殊化,每個子類的實例都是其父類的實例,但是反過來不成立。例如:每個圓都是一個幾何對象,但并非每個幾何對象都是圓。因此,總可以將子類的實例傳給需要父類型的參數(shù)。參考案例如下:

public class PolymorphismDemo{
/** Main method */
public static void main(String[] args){
  displayObject(new Circle(1,"red",false));
  displayObject(new Rectangle(1,1,"black",true));
}
 
public static void displayObject(GeometriicObject object){
  System.out.println("Created on "+ object.getDateCreated()+".Color is"+object.getColor());
}
}

Created on Mon Mar 09 19:25:20 EDT 2011.Color is red

Created on Mon Mar 09 19:25:20 EDT 2011.Color is black

? ? ? ?方法displayObject具有GeometriicObject類型的參數(shù)。可以通過傳遞任何一個GeometriicObject的實例來調用displayObject。使用父類對象的地方都可以使用子類的對象。這就是通常說的多態(tài)。簡單來說,多態(tài)意味著父類型的變量可以引用子類型的對象。

二、多態(tài)的特點

?多態(tài)的前提:繼承(即必須有子父類關系。)在使用多態(tài)后的父類引用變量調用方法時,會? ?調用子類重寫后的方法。?定義格式:父類類型 變量名=new 子類類型();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?父類引用指向子類對象,如:Animal a = new Cat();?多態(tài)中,編譯看左邊,運行看右邊

三、instanceof操作符

? ? ? ?instanceof是Java的關鍵字。Java關鍵字中的每個字母都是小寫的。

? ? ? ?為了更好地理解類型轉換,可以認為它們類似于動物、北極熊、熊貓之間的關系,其中動物類Animal是北極熊類Polar bear和熊貓類Panda類的父類。北極熊是動物,所以,總是可以將?Polar bear的實例安全地賦值給Animal變量。該關鍵字用法是判斷某個對象是否屬于某種數(shù)據(jù)類型,返回值為布爾類型。

 
        Fu Zz=new Xu();
        Fu Zzz=new yiting();
        if(f1 instanceof Xu){
            System.out.println("Zz是Xu的類型");
        }
        else{
            System.out.println("Zzz是yiting的類型");
        }

四、多態(tài)的轉型

1、向上轉型

? ? ? ?總是可以將一個子類的實例轉換為一個父類的變量,稱為向上轉換,因為子類的實例總是它的父類的實例。

作用:

減少一些重復的代碼對象實例化的時候可以根據(jù)不同需求實例化不同的對象

package project2;
	class Animal{
		int num=100;
		void say(){
			System.out.println("It's an Animal.");
		}
	}
 
	class Cat extends Animal{
		int num=50;
		void say(){
			System.out.println("It's a Cat.");
		}	
		void bark(){
			System.out.println("喵喵喵!");
		}
	}
 
	public class project2{
		public static void main(String[] args) {
			Animal cat=new Cat();//向上轉型	
			System.out.println(cat.num);
			cat.say();
//			cat.bark();
		}
	}

運行結果:

100
It's a Cat.

向上轉型不要強制轉型,父類引用指向的或者調用的方法是子類的方法,這個叫動態(tài)綁定。向上轉型后父類引用不能調用子類自己的方法。

2、向下轉型

? ? ? ?把一個父類的實例轉換為它的子類變量。必須使用轉換標記(子類名)進行顯示轉換,向編譯器表明你的意圖。為使轉換成功,必須確保要轉換的對象是子類的一個實例。

作用:

? ? ? ? 向上轉型時 ,會遺失子類對象獨有的其他方法;可以通過向下轉型再重新轉回。

package project2;
class Animal{
	int num=100;
	void say(){
		System.out.println("It's an Animal.");
	}
}
 
class Cat extends Animal{
	int num=50;
	void say(){
		System.out.println("It's a Cat.");
	}	
	void bark(){
		System.out.println("喵喵喵!");
	}
}
 
public class project2{
	public static void main(String[] args) {
		Animal cat=new Cat();//向上轉型
		Cat cat2=(Cat) cat;//向下轉型
		System.out.println(cat2.num);
		cat2.say();
		cat2.bark();
	}
}

運行結果:

50
It's a Cat.
喵喵喵!

五、方法重寫

提示:要重寫一個方法,需要在子類中使用和父類一樣的簽名來對該方法進行定義。

子類從父類中繼承方法。有時,子類需要修改父類中定義的方法的實現(xiàn),這稱為方法重寫。

以下幾點值得注意:

重寫的方法必須與被重寫的方法具有一樣的簽名,以及一樣或者兼容的返回類型。兼容的含義是重寫方法的返回類型可以是被重寫方法的返回類型的子類型。僅當實例方法可訪問時,它才能被重寫。如果子類中定義的方法在父類中是私有的,那么這兩個方法完全沒有關系。與實例方法一樣,靜態(tài)方法也能被繼承。但是,靜態(tài)方法不能被重寫。如果父類定義的靜態(tài)方法在子類中被重新定義,那么在父類中定義的靜態(tài)方法將被隱藏。可以使用語法“父類名.靜態(tài)方法名”調用隱藏的靜態(tài)方法。防止繼承和重寫

? ? ? ?一個被final修飾的類和方法都不能被繼承。被final修飾的數(shù)據(jù)域是一個常數(shù)。

? ? ? ?有時候,可能希望防止類被繼承。在這種情況下,使用final修飾符表明一個類是最終類,是不能作為父類的。Math類就是一個最終類。String、StringBuilder和StringBuffer類以及所有基本數(shù)據(jù)類型的包裝類也都是最終類。例如,如下類A 就是最終類,不能被繼承:

public final class A{
  //Data fields,constructors, and methods omitted
}

? ? ? ?也可以定義一個方法為最終,最終方法不能被它的子類重寫。例如如下,不能被重寫:

public class Test {
  //Data fields,constructors, and methods omitted
 
  public final void m() {
    // Do something
 }
}

注:修飾符public、protected、private、static、abstract以及final可以用在類和類的成員上,只有final修飾符還可以用在方法中的局部變量上。方法內的final局部變量就是常量。

六、小結

為了重寫一個方法,必須使用與它的父類中的方法一樣的簽名、一樣或者兼容的返回類型來定義子類中的方法。實例方法只有在可訪問時才能重寫。這樣,私有方法是不能重寫的,因為它是不能在類本身之外訪問的。如果子類中定義的方法在父類中是私有的,那么這兩個方法是完全沒有關系的噢!靜態(tài)方法與實例方法一樣可以繼承。但是,靜態(tài)方法不能重寫,如果父類中定義的靜態(tài)方法在子類中重新定義,那么父類中定義的方法被隱藏??梢允褂帽磉_式obj instanceof AClass 測試一個對象是否是一個類的實例??梢允褂胒inal修飾符來表明一個類是最終類,是不能被繼承的;也可以表明一個方法是最終的,是不能被重寫的。

到此這篇關于Java之理解多態(tài)詳解的文章就介紹到這了,更多相關Java多態(tài)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java filter中的chain.doFilter使用詳解

    Java filter中的chain.doFilter使用詳解

    這篇文章主要介紹了Java filter中的chain.doFilter使用詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • DolphinScheduler容錯源碼分析之Worker

    DolphinScheduler容錯源碼分析之Worker

    這篇文章主要為大家介紹了DolphinScheduler容錯源碼分析之Worker,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • Java定時器Timer使用方法詳解

    Java定時器Timer使用方法詳解

    這篇文章主要為大家詳細介紹了Java定時器Timer的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Java線程監(jiān)聽,意外退出線程后自動重啟的實現(xiàn)方法

    Java線程監(jiān)聽,意外退出線程后自動重啟的實現(xiàn)方法

    下面小編就為大家?guī)硪黄狫ava線程監(jiān)聽,意外退出線程后自動重啟的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Java內存結構和數(shù)據(jù)類型

    Java內存結構和數(shù)據(jù)類型

    本文重點給大家介紹java內存結構和數(shù)據(jù)類型知識,非常不錯,具有參考借鑒價值,需要的朋友參考下
    2016-12-12
  • maven的5種打包方式小結

    maven的5種打包方式小結

    本文主要介紹了maven的5種打包方式小結,主要是幾種插件打包,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-06-06
  • 關于try 和 throw 簡單使用示例

    關于try 和 throw 簡單使用示例

    每過一段時間,就總是會對try有點生疏,特別寫了個程序來測試以下,有時候 throw是底層拋出來的,你不處理,默認就throw了
    2013-08-08
  • Java中兩種基本的輸入方式小結

    Java中兩種基本的輸入方式小結

    這篇文章主要介紹了Java中兩種基本的輸入方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • SpringBoot中的@ConfigurationProperties注解解析

    SpringBoot中的@ConfigurationProperties注解解析

    這篇文章主要介紹了SpringBoot中的@ConfigurationProperties注解解析,Spring源碼中大量使用了ConfigurationProperties注解,通過與其他注解配合使用,能夠實現(xiàn)Bean的按需配置,該注解可以放在類上,也可以放在方法上,需要的朋友可以參考下
    2023-11-11
  • 深入淺析Spring-boot-starter常用依賴模塊

    深入淺析Spring-boot-starter常用依賴模塊

    這篇文章主要介紹了Spring-boot-starter常用依賴模塊及spring boot的兩大優(yōu)點,需要的朋友可以參考下
    2018-01-01

最新評論

利津县| 山东省| 马边| 道孚县| 惠安县| 抚远县| 达孜县| 鄂伦春自治旗| 镇江市| 剑川县| 绥江县| 阿尔山市| 绿春县| 石棉县| 林周县| 洛扎县| 巴中市| 永福县| 全南县| 达拉特旗| 娱乐| 乌兰县| 苍梧县| 盱眙县| 甘洛县| 怀远县| 镇赉县| 内江市| 常熟市| 北京市| 苍溪县| 黎城县| 湄潭县| 军事| 青阳县| 兰州市| 博白县| 宝山区| 房产| 成安县| 德化县|