欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解java封裝繼承多態(tài)

 更新時(shí)間:2019年03月28日 09:08:22   作者:海綿愛上星  
這篇文章主要介紹了java封裝繼承多態(tài),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

面向?qū)ο缶幊蹋∣bject Oriented Programming)有三大特性:封裝、繼承、多態(tài)。在這里,和大家一起加深對三者的理解。

封裝

封裝可以拆開理解,裝,是把數(shù)據(jù)和方法放進(jìn)了類里;封,把裝進(jìn)去的數(shù)據(jù)和成員方法加上訪問權(quán)限。對于外界,內(nèi)部細(xì)節(jié)是透明的,暴露給外面的是它的訪問方法。

繼承

繼承,是為了重用父類代碼。兩個(gè)類若具有is a的關(guān)系就可以用extends。另外,繼承也為實(shí)現(xiàn)多態(tài)做了鋪墊。

多態(tài)

程序中定義的引用變量(java有兩大數(shù)據(jù)類型,內(nèi)部數(shù)據(jù)類型和引用數(shù)據(jù)類型)所指向的具體類型和通過該引用變量發(fā)出的方法調(diào)用在編譯時(shí)并不確定,而是在程序運(yùn)行期間才確定,即一個(gè)引用變量到低指向哪個(gè)類的實(shí)例對象,該引用變量發(fā)出的方法調(diào)用到底是哪個(gè)類中實(shí)現(xiàn)的方法,必須在程序運(yùn)行期間才能決定。
在理解多態(tài)時(shí),總是逃不掉“向上轉(zhuǎn)型”。

問題的核心在于,一般情況下,在子類繼承父類后,子類具有父類的所有成員和方法。但是在向上轉(zhuǎn)型之后,子類中一些獨(dú)有的成員和方法對于該父類類型的引用變量則“不可見”。

實(shí)例

package binaryheap.test;

import java.awt.image.SinglePixelPackedSampleModel;

//創(chuàng)建一個(gè)Animal類
class Animal {
	public void run() {
		System.out.println("Animal在奔跑?。?!");
		sing();
	}

	public void sing() {
		System.out.println("Animal在唱歌~~~");
	}

}

//創(chuàng)建一個(gè)子類繼承父類
class Lion extends Animal {

	// 重載run()方法,和父類中的run()方法不是一個(gè)
	// 向上轉(zhuǎn)型時(shí)會(huì)丟失該方法
	public void run(String anotherAnimal) {

		System.out.println(("Lion在追一只" + anotherAnimal));;
		sing();
	}

	// 重寫
	public void sing() {
		System.out.println("Lion在唱歌~~~");
	}

}

public class BH {

	public static void main(String[] args) {
		// 創(chuàng)建一個(gè)父類引用,但是指向Lion對象
		Animal animal = new Lion();
		animal.run();
	}
}

結(jié)果:

Animal在奔跑?。?!
Lion在唱歌~~~

Animal animal = new Lion(); 向上轉(zhuǎn)型后的Animal類型的引用,丟失了重載的方法run(),即子類中的run(),指向的是父類的run(),因此輸出“Animal在奔跑”,而不是“Lion在奔跑”。run()方法中調(diào)用了sing()方法,因?yàn)閟ing()方法被重寫,引用能夠找到sing()方法,因此引用調(diào)用此sing()方法(動(dòng)然調(diào)用),輸出“Lion在唱歌”。

實(shí)現(xiàn)多態(tài)的必要條件為:繼承、重寫、向上轉(zhuǎn)型(或者說父類引用指向子類對象)。其實(shí)現(xiàn)機(jī)制為:調(diào)用那個(gè)方法是由被引用對象的類型決定,而不是引用變量的類型決定的,并且這個(gè)被調(diào)用的方法必須是被子類重寫過的。

總結(jié):

  1. 使用父類的引用指向子類對象
  2. 該引用只能調(diào)用父類中定義的方法和變量
  3. 若子類重寫了父類的一個(gè)方法(只能重寫方法,不能重寫變量,否則編譯時(shí)期會(huì)報(bào)錯(cuò)),那么調(diào)用的時(shí)候會(huì)調(diào)用子類的這個(gè)方法。

此外,在多態(tài)引用時(shí),可能會(huì)涉及到超類的構(gòu)造方法。調(diào)用超類的構(gòu)造方法的順序是先調(diào)用最遠(yuǎn)的超類的構(gòu)造方法。

以上所述是小編給大家介紹的java封裝繼承多態(tài)詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 詳解為什么阿里巴巴禁止使用BigDecimal的equals方法做等值比較

    詳解為什么阿里巴巴禁止使用BigDecimal的equals方法做等值比較

    這篇文章主要介紹了詳解為什么阿里巴巴禁止使用BigDecimal的equals方法做等值比較,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java找出兩個(gè)大數(shù)據(jù)量List集合中的不同元素的方法總結(jié)

    Java找出兩個(gè)大數(shù)據(jù)量List集合中的不同元素的方法總結(jié)

    本文將帶大家了解如何快速的找出兩個(gè)相似度非常高的List集合里的不同元素。主要通過Java API、List集合雙層遍歷比較不同、借助Map集合查找三種方式,需要的可以參考一下
    2022-10-10
  • Eclipse 導(dǎo)出可執(zhí)行Java工程/可執(zhí)行Jar文件(包含第三方Jar包)

    Eclipse 導(dǎo)出可執(zhí)行Java工程/可執(zhí)行Jar文件(包含第三方Jar包)

    這篇文章主要介紹了Eclipse 導(dǎo)出可執(zhí)行Java工程/可執(zhí)行Jar文件(包含第三方Jar包)的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • mybatis輸出SQL格式化方式

    mybatis輸出SQL格式化方式

    這篇文章主要介紹了mybatis輸出SQL格式化方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 詳解pom如何引入非Maven工程的jar包

    詳解pom如何引入非Maven工程的jar包

    系統(tǒng)遷移從某個(gè)公有云遷移到私有云,因?yàn)楝F(xiàn)在國內(nèi)大力推行國產(chǎn)化,所以我們這次遷移有兩個(gè)國產(chǎn)化的東西,第一個(gè)是操作系統(tǒng)采用了歐拉操作系統(tǒng),第二個(gè)就是數(shù)據(jù)庫采用了goldendb,本文給大家詳細(xì)介紹了pom如何引入非Maven工程的jar包,需要的朋友可以參考下
    2023-12-12
  • Java 完美判斷中文字符的方法

    Java 完美判斷中文字符的方法

    Java判斷一個(gè)字符串是否有中文一般情況是利用Unicode編碼正則來做判斷,但是其實(shí)這個(gè)區(qū)間來判斷中文不是非常精確,以下是比較完善的判斷方法
    2013-02-02
  • Mybatis添加Ehcache支持的方法

    Mybatis添加Ehcache支持的方法

    mybatis添加ehcache支持非常簡單,只主要在sql映射文件中添加一行代碼就可以實(shí)現(xiàn),糾結(jié)是什么代碼呢,這么神奇,帶著這樣問題一起通過本文學(xué)習(xí)吧
    2016-08-08
  • 關(guān)于.java編譯成.class?與?.class反編譯成.java問題

    關(guān)于.java編譯成.class?與?.class反編譯成.java問題

    這篇文章主要介紹了關(guān)于.java編譯成.class?與?.class反編譯成.java問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • SpringBoot+WebSocket向前端推送消息的實(shí)現(xiàn)示例

    SpringBoot+WebSocket向前端推送消息的實(shí)現(xiàn)示例

    WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的協(xié)議,允許服務(wù)器主動(dòng)向客戶端推送信息,同時(shí)也能從客戶端接收信息,本文主要介紹了SpringBoot+WebSocket向前端推送消息的實(shí)現(xiàn)示例,感興趣的可以了解一下
    2024-08-08
  • Java中的CGLIB動(dòng)態(tài)代理的使用及原理詳解

    Java中的CGLIB動(dòng)態(tài)代理的使用及原理詳解

    這篇文章主要介紹了Java中的CGLIB動(dòng)態(tài)代理的使用及原理詳解,CGLIB是一個(gè)功能強(qiáng)大,高性能的代碼生成包,它為沒有實(shí)現(xiàn)接口的類提供代理,為JDK的動(dòng)態(tài)代理提供了很好的補(bǔ)充,需要的朋友可以參考下
    2023-09-09

最新評論