搜尋
首頁Javajava教程Java概念理解總結之多態性

這篇文章為大家帶來了關於java的相關知識,主要講的是Java之理解多態詳解,繼承關係使一個子類能繼承父類的特徵,並且附加一些新特徵。子類別是它的父類別的特殊化,每個子類別的實例都是其父類別的實例,但是反過來不成立,希望對大家有幫助。

Java概念理解總結之多態性

推薦學習:《java影片教學

一、多態的概念

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

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.Created on Mon Mar 09 19:25:20 EDT 2011.Created is black

       方法displayObject具有GeometriicObject型別的參數。可以透過傳遞任何GeometriicObject的實例來呼叫displayObject。使用父類別物件的地方都可以使用子類別的物件。這就是通常說的多態。 簡單來說,多態意味著父類型的變數可以引用子類型的物件

二、多態的特徵

 多態的前提:繼承(即必須有子父類別關係。)使用多態後的父類別引用變數呼叫方法時,會   呼叫子類別重寫後的方法。定義格式:父類別類型變數名稱=new 子類別();                                      父類別引用指向子類別物件,如:Animal a = new Cat(); 多型中,編譯看左邊,執行看右邊

#三、instanceof運算子

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

       為了更能理解類型轉換,可以認為它們類似於動物、北極熊、熊貓之間的關係,其中動物類Animal是北極熊貓類Polar bear和熊貓類Panda類的父類。北極熊是動物,所以,總是可以將 Polar bear的實例安全地賦值給Animal變數。 此關鍵字用法是判斷某個物件是否屬於某種資料型別,傳回值為布林類型。

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

四、多態的轉換

1、向轉型

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

作用:

減少一些重複的程式碼物件實例化的時候可以根據不同需求實例化不同的物件

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.

向轉型不要強制轉型,父類別引用指向的或呼叫的方法是子類別的方法,這個叫做動態綁定。向上轉型後父類別引用不能呼叫子類別自己的方法。

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.
喵喵喵!

###############################################################################################################################################################################################################################幫助####提示:要重寫一個方法,需要在子類別中使用和父類別一樣的簽章來對方法進行定義。 ######子類別從父類別繼承方法。有時,子類別需要修改父類別中定義的方法的實現,稱為方法重寫。 ######以下幾點值得注意:######重寫的方法必須與被重寫的方法具有相同的簽名,以及相同或相容的回傳類型。相容的意思是重寫方法的回傳類型可以是被重寫方法的回傳類型的子類型。只有當實例方法可存取時,它才能被重寫。如果子類別中定義的方法在父類別中是私有的,那麼這兩個方法完全沒有關係。與實例方法一樣,靜態方法也能被繼承。但是,靜態方法不能被重寫。如果父類別定義的靜態方法在子類別中被重新定義,那麼在父類別中定義的靜態方法將會被隱藏。可以使用語法「父類別名稱.靜態方法名稱」呼叫隱藏的靜態方法。防止繼承和重寫###

       一个被final修饰的类和方法都不能被继承。被final修饰的数据域是一个常数。

       有时候,可能希望防止类被继承。在这种情况下,使用final修饰符表明一个类是最终类,是不能作为父类的。Math类就是一个最终类。String、StringBuilder和StringBuffer类以及所有基本数据类型的包装类也都是最终类。例如,如下类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局部变量就是常量。

六、小结

为了重写一个方法,必须使用与它的父类中的方法一样的签名、一样或者兼容的返回类型来定义子类中的方法。实例方法只有在可访问时才能重写。这样,私有方法是不能重写的,因为它是不能在类本身之外访问的。如果子类中定义的方法在父类中是私有的,那么这两个方法是完全没有关系的噢!静态方法与实例方法一样可以继承。但是,静态方法不能重写,如果父类中定义的静态方法在子类中重新定义,那么父类中定义的方法被隐藏。可以使用表达式obj instanceof AClass 测试一个对象是否是一个类的实例。可以使用final修饰符来表明一个类是最终类,是不能被继承的;也可以表明一个方法是最终的,是不能被重写的。

推荐学习:《java视频教程

以上是Java概念理解總結之多態性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:脚本之家。如有侵權,請聯絡admin@php.cn刪除
如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器