- 相關(guān)推薦
Java基礎(chǔ):抽象類和接口
導(dǎo)語(yǔ):Java是一門面向?qū)ο缶幊陶Z(yǔ)言,不僅吸收了C++語(yǔ)言的各種優(yōu)點(diǎn),還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語(yǔ)言具有功能強(qiáng)大和簡(jiǎn)單易用兩個(gè)特征。下面我們來(lái)看看抽象類和接口,希望對(duì)大家有所幫助。
第一節(jié) 抽象類
一.包含抽象方法的類;
抽象方法:只有方法聲明,沒有方法實(shí)現(xiàn)的方法稱為“抽象方法”;
抽象類是對(duì)問題領(lǐng)域進(jìn)行分析后得出的抽象概念。
抽象類和抽象方法必須使用abstract修飾。
1 2 3 | <code>抽象類的語(yǔ)法,規(guī)則。 定義抽象類有三種情況:直接定義一個(gè)抽象類;或繼承一個(gè)抽象類,但是沒有完全實(shí)現(xiàn)父類包含的抽象方法;或?qū)崿F(xiàn)一個(gè)接口,但沒有完全實(shí)現(xiàn)接口中的抽象方法。 </code> |
二.abstrac關(guān)鍵字
abstract不能用來(lái)修飾成員變量和構(gòu)造方法,即沒有抽象變量和抽象構(gòu)造方法的說(shuō)法。abstract修飾的方法必須被其子類重寫才有意義,否則這個(gè)方法永遠(yuǎn)不會(huì)有方法體,因此抽象方法不能定義為private,即為private和abstract不能同時(shí)修飾方法,abstract也不能和static,final或native同時(shí)修飾同一方法。
三.使用抽象類
抽象類不能實(shí)例化(不能new 父類),只能被當(dāng)成父類來(lái)繼承。作為子類的模板。
實(shí)例化它的子類,父類引用子類。
第二節(jié) 接口 interface
接口中的所有方法都是抽象方法
一.a.接口;定義了某一批類所需要遵守的公共行為規(guī)范,只規(guī)定這批類必須提供的某些方法,而不是提供任何實(shí)現(xiàn)。體現(xiàn)了規(guī)范和實(shí)現(xiàn)的分離。是讓系統(tǒng)的各個(gè)模塊間面向接口耦合,是一種松耦合設(shè)計(jì),降低模塊間的耦合,增強(qiáng)系統(tǒng)的可擴(kuò)展性和可維護(hù)性。
b.定義一個(gè)接口,java只支持單一繼承,不支持多重繼承。java允許一個(gè)類實(shí)現(xiàn)多個(gè)接口,使得程序更加靈活、易于擴(kuò)展。
c.一個(gè)接口可以繼承多個(gè)父接口,但接口只能繼承接口,不能繼承類;在接口里可以包含靜態(tài)常量,抽象方法,內(nèi)部類,內(nèi)部接口以及枚舉定義,java8之后允許定義默認(rèn)方法,類方法;接口和類的默認(rèn)訪問符不同,接口體內(nèi)定義的常量,方法等默認(rèn)為public,可省略,即為接口定義的常量或方法不寫public,其訪問權(quán)依然是public。
d.實(shí)現(xiàn)一個(gè)接口,(關(guān)鍵字implements)implements是一個(gè)類,實(shí)現(xiàn)一個(gè)接口用的關(guān)鍵字,它是用來(lái)實(shí)現(xiàn)接口中定義的抽象方法。實(shí)現(xiàn)一個(gè)接口,必須實(shí)現(xiàn)接口中的所有方法;但沒有完全實(shí)現(xiàn)接口中包含的抽象方法的類是抽象類
二.接口的繼承
注意點(diǎn):a.和抽象類一樣,接口是一種更加抽象的類結(jié)構(gòu),不能對(duì)接口直接實(shí)例化;可以聲明接口變量,并且用接口指向當(dāng)前接口實(shí)現(xiàn)類的實(shí)例。使用接口指向當(dāng)前接口實(shí)現(xiàn)類的實(shí)例對(duì)象,這種方式也是多態(tài)性的體現(xiàn)。
一個(gè)接口可以繼承多個(gè)接口,這和類的繼承是不同的;接口體現(xiàn)的是一種規(guī)范;抽象類體現(xiàn)的是一種模板式設(shè)計(jì)。接口中定義的變量都是常量;抽象類中的定義的變量與普通類一樣,默認(rèn)是缺省。
三.implements和extends的區(qū)別:
1 2 3 4 | <code><code>Extends,表示對(duì)父類的繼承,可以實(shí)現(xiàn)父類,也可以調(diào)用父類初始化 this .parent()。而且會(huì)覆蓋父類定義的變量或者函數(shù)。 Implements,表示對(duì)接口的實(shí)現(xiàn),接口通過關(guān)鍵字 interface 進(jìn)行定義。eg: public class S implements F,在接口F中對(duì)方法進(jìn)行聲明,在類S中對(duì)該方法進(jìn)行實(shí)現(xiàn)。 </code></code> |
四.面向接口編程
1 2 3 | <code><code><code>面向接口編程和面向?qū)ο缶幊痰年P(guān)系: 首先,面向接口編程和面向?qū)ο缶幊滩⒉皇瞧郊?jí)的,它并不是比面向?qū)ο缶幊谈冗M(jìn)的一種獨(dú)立的編程思想,而是附屬于面向?qū)ο笏枷塍w系,屬于其一部分。或者說(shuō),它是面向?qū)ο缶幊腆w系中的思想精髓之一。 </code></code></code> |
什么是面向接口編程:
譬如有一個(gè)Animal接口和一個(gè)NightWorking接口,公雞實(shí)現(xiàn)了Animal接口,貓頭鷹實(shí)現(xiàn)了Animal接口和NightWorking接口,還有一個(gè)實(shí)現(xiàn)了NightWorking接口的路燈,在Animal的范疇下,我們可以稱公雞和貓頭鷹是同類事物,而在NightWorking的范疇下,我們可以稱貓頭鷹和路燈是同類事物,這里就是說(shuō)對(duì)于animal接口來(lái)說(shuō),要看種類的話路燈是不會(huì)實(shí)現(xiàn)animal里面的NightWorking接口的,但是要看是否有想要的功能實(shí)現(xiàn)NightWorking接口的話,貓頭鷹和路燈都同一事物。 不是面向?qū)崿F(xiàn),而是面向接口。
1 2 | <code><code><code><code>特點(diǎn):可維護(hù)性,可擴(kuò)展性 </code></code></code></code> |
第三節(jié) instanceof 關(guān)鍵字
instanceof是Java的一個(gè)二元操作符,和==,>,<是同一類東東。由于它是由字母組成的,所以也是Java的保留關(guān)鍵字。
1 2 3 | <code><code><code><code><code>作用:鑒別對(duì)象的類型。 語(yǔ)法: 引用類型變量 instanceof 引用類型 示例:String a=“abc”; Object b=“abc”; 判斷→System.out.println(“是否是object的實(shí)例”+(b instanceof object)); </code></code></code></code></code> |
【Java基礎(chǔ):抽象類和接口】相關(guān)文章:
Java抽象類和接口的比較08-01
Java中接口和抽象類的異同08-12
Java抽象類與接口的區(qū)別04-17
理解Java的接口與抽象類06-22
接口和抽象類的區(qū)別05-09
Java的抽象和接口03-31
Java中的抽象類07-15
java繼承抽象類07-28
Java接口介紹05-08