目錄
一、多態的概念
二、多態的特徵
#三、instanceof運算子
四、多態的轉換
1、向轉型
2、向下轉換
六、小结
首頁 Java java教程 Java概念理解總結之多態性

Java概念理解總結之多態性

Sep 01, 2022 pm 02:48 PM
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

熱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 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java 中的完美數 Java 中的完美數 Aug 30, 2024 pm 04:28 PM

Java 完美數指南。這裡我們討論定義,如何在 Java 中檢查完美數?

Java 中的隨機數產生器 Java 中的隨機數產生器 Aug 30, 2024 pm 04:27 PM

Java 隨機數產生器指南。在這裡,我們透過範例討論 Java 中的函數,並透過範例討論兩個不同的生成器。

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java 版 Weka 指南。這裡我們透過範例討論簡介、如何使用 weka java、平台類型和優點。

Java 中的史密斯數 Java 中的史密斯數 Aug 30, 2024 pm 04:28 PM

Java 史密斯數指南。這裡我們討論定義,如何在Java中檢查史密斯號?帶有程式碼實現的範例。

Java Spring 面試題 Java Spring 面試題 Aug 30, 2024 pm 04:29 PM

在本文中,我們保留了最常被問到的 Java Spring 面試問題及其詳細答案。這樣你就可以順利通過面試。

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

Java 中的時間戳至今 Java 中的時間戳至今 Aug 30, 2024 pm 04:28 PM

Java 中的時間戳記到日期指南。這裡我們也結合範例討論了介紹以及如何在java中將時間戳記轉換為日期。

創造未來:零基礎的 Java 編程 創造未來:零基礎的 Java 編程 Oct 13, 2024 pm 01:32 PM

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。

See all articles