Java?深入淺出解析面向?qū)ο笾橄箢惡徒涌?/h1>
更新時(shí)間:2022年03月23日 14:59:35 作者:桃花鍵神
本章具體介紹了抽象類和接口,整篇文章用目前流行的手機(jī)來(lái)舉例,圖解穿插代碼案例。?JAVA成仙路從基礎(chǔ)開始講,后續(xù)會(huì)講到JAVA高級(jí),中間會(huì)穿插面試題和項(xiàng)目實(shí)戰(zhàn),希望能給大家?guī)?lái)幫助
抽象類
java語(yǔ)言,聲明類時(shí) abstract
class Db{} 說(shuō)明Db類為抽象類。 java語(yǔ)言中,抽象方法是說(shuō)沒有方法的實(shí)現(xiàn)(方法體)此方法為抽象方法,只有抽象類和接口中才可以有抽象方法。
聲明抽象類
聲明抽象類很簡(jiǎn)單,加個(gè)abstract關(guān)節(jié)字就行。
public abstract class AA {
}
聲明抽象方法
在抽象類中聲明一個(gè)抽象方法,抽象方法沒有方法體,就是說(shuō)現(xiàn)在這個(gè)方法就是個(gè)空架子。
public abstract class AA {
public abstract int a(int i);
}
案例
描述:
- 小米手機(jī)生產(chǎn)廠生產(chǎn)手機(jī),小米手機(jī)廠內(nèi)部分為兩個(gè)分廠,一個(gè)是紅米手機(jī)廠,一個(gè)是黑米手機(jī)廠。
- 紅米手機(jī)特點(diǎn)是屏幕大,充電快。
- 黑米手機(jī)特點(diǎn)是發(fā)熱,音質(zhì)好。
實(shí)現(xiàn):
- 先聲明一個(gè)抽象類 小米手機(jī)廠類,小米手機(jī)廠類里有兩個(gè)抽象方法分別為a和b,還有一個(gè)定義過(guò)的方法c
- 再聲明一個(gè)紅米手機(jī)廠類繼承小米手機(jī)廠,并且實(shí)現(xiàn)方法a和方法b
- 再聲明一個(gè)黑米手機(jī)廠類繼承小米手機(jī)廠,并且實(shí)現(xiàn)方法a和方法b
代碼:
Mi.java
public abstract class Mi {
public abstract void a();
public abstract void b();
public void c(){
System.out.println("小米手機(jī)好");
}
}
Hong.java
public class Hong extends Mi {
@Override
public void a() {
System.out.println("紅米手機(jī)屏幕大");
}
@Override
public void b() {
System.out.println("紅米手機(jī)充電快");
}
}
Hei.java
public class Hei extends Mi {
@Override
public void a() {
System.out.println("黑米手機(jī)發(fā)熱");
}
@Override
public void b() {
System.out.println("黑米手機(jī)音質(zhì)好");
}
}
測(cè)試:
public class Test {
public static void main(String[] args) {
Hong hong = new Hong();
Hei hei = new Hei();
hong.a();
hong.b();
hong.c();
hei.a();
hei.b();
hei.c();
}
}

這個(gè)案例的主要描述了抽象方法的一個(gè)應(yīng)用場(chǎng)景,紅米和黑米是小米的一個(gè)分支,他們有小米的部分功能,但是他們還想有自己的特色。那么就可以通過(guò)實(shí)現(xiàn)小米的兩個(gè)抽象方法來(lái)實(shí)現(xiàn)自己的特色。并且小米只聲明了兩個(gè)抽象方法,限制了兩個(gè)子廠的特色,讓他們只能增加兩個(gè)特色,不能無(wú)限制的隨意增加多個(gè)特色。
使用規(guī)則
使用規(guī)則
抽象類必須被繼承,抽象方法必須被重寫。
抽象類中的抽象方法只需聲明,無(wú)需實(shí)現(xiàn),沒有方法體
抽象類不能被實(shí)例化,抽象類不一定要包含抽象方法,而定義抽象方法的類必須是抽象類。
抽象類包含的抽象方法必須在其子類中被實(shí)現(xiàn),否則該子類也必須是抽象類。
抽象類可以有構(gòu)造方法供子類實(shí)例化對(duì)象
抽象類不能直接實(shí)例化使用,一般用的是抽象類的子類,
A a = new B();
A和B之間的關(guān)系,繼承關(guān)系,接口實(shí)例關(guān)系。
類:方法+屬性+靜態(tài)程序段+初始化程序段
抽象類:方法+抽象方法+屬性+靜態(tài)程序段+初始化程序段
抽象類本質(zhì)
1.從類的組成上看其是抽象方法和非抽象方法的集合,還有屬性(常量)。
2.從設(shè)計(jì)的角度來(lái)看,實(shí)際上抽象類定義了一套規(guī)范(抽象方法)。(規(guī)范)
接口
接口(英文:Interface),在JAVA編程語(yǔ)言中是一個(gè)抽象類型,是抽象方法的集合,接口通常以interface來(lái)聲明。一個(gè)類通過(guò)繼承接口的方式,從而來(lái)繼承接口的抽象方法。 接口并不是類,編寫接口的方式和類很相似,但是它們屬于不同的概念。類描述對(duì)象的屬性和方法。接口則包含類要實(shí)現(xiàn)的方法。 除非實(shí)現(xiàn)接口的類是抽象類,否則該類要定義接口中的所有方法。 接口無(wú)法被實(shí)例化,但是可以被實(shí)現(xiàn)。一個(gè)實(shí)現(xiàn)接口的類,必須實(shí)現(xiàn)接口內(nèi)所描述的所有方法,否則就必須聲明為抽象類。另外,在 Java 中,接口類型可用來(lái)聲明一個(gè)變量,他們可以成為一個(gè)空指針,或是被綁定在一個(gè)以此接口實(shí)現(xiàn)的對(duì)象。
聲明接口
interface關(guān)鍵字聲明接口AA
public interface AA {
}
案例
描述:
富士康加工廠里有兩個(gè)分廠,分別是加工華為手機(jī)和蘋果手機(jī)。每個(gè)手機(jī)是由電池、芯片、屏幕這三個(gè)硬件組成。兩個(gè)品牌的手機(jī)都是由這三個(gè)硬件組成但是硬件的型號(hào)不同。
但是這兩個(gè)廠都有一個(gè)統(tǒng)一的加工程序把手機(jī)組裝
實(shí)現(xiàn):
聲明富士康接口,接口內(nèi)聲明一個(gè)抽象方法用來(lái)組裝手機(jī)。
華為和蘋果兩個(gè)類分別實(shí)現(xiàn)富士康接口,并且實(shí)現(xiàn)里面的方法。
富士康接口
public interface Fu {
void zhuang();
}
華為加工廠
public class HuaWei implements Fu {
private final String xin = "麒麟芯片";
private final String dian = "6000am電池";
private final String ping = "大猩猩屏幕";
@Override
public void zhuang() {
System.out.printf("華為手機(jī):%s,%s,%s %n", xin, dian, ping);
}
}
蘋果加工廠
public class Iphoe implements Fu {
private final String xin = "A15芯片";
private final String dian = "3000am電池";
private final String ping = "小猩猩屏幕";
@Override
public void zhuang() {
System.out.printf("蘋果手機(jī):%s,%s,%s %n", xin, dian, ping);
}
}
測(cè)試
public class Test {
public static void main(String[] args) {
HuaWei huaWei = new HuaWei();
Iphoe iphoe = new Iphoe();
huaWei.zhuang();
iphoe.zhuang();
}
}

接口特性
接口中每一個(gè)方法也是隱式抽象的,接口中的方法會(huì)被隱式的指定為 public abstract(只能是 public abstract,其他修飾符都會(huì)報(bào)錯(cuò))。
接口中可以含有變量,但是接口中的變量會(huì)被隱式的指定為 public static final 變量(并且只能是 public,用 private 修飾會(huì)報(bào)編譯錯(cuò)誤)。
接口中的方法是不能在接口中實(shí)現(xiàn)的,只能由實(shí)現(xiàn)接口的類來(lái)實(shí)現(xiàn)接口中的方法。
抽象類和接口的區(qū)別
- 抽象類中的方法可以有方法體,就是能實(shí)現(xiàn)方法的具體功能,但是接口中的方法不行。
- 抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是 public static final 類型的。
- 接口中不能含有靜態(tài)代碼塊以及靜態(tài)方法(用 static 修飾的方法),而抽象類是可以有靜態(tài)代碼塊和靜態(tài)方法。
- 一個(gè)類只能繼承一個(gè)抽象類,而一個(gè)類卻可以實(shí)現(xiàn)多個(gè)接口。
到此這篇關(guān)于Java 深入淺出解析面向?qū)ο笾橄箢惡徒涌诘奈恼戮徒榻B到這了,更多相關(guān)Java 抽象類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
-
Java程序結(jié)構(gòu)與常量變量難點(diǎn)解析
JAVA的基本結(jié)構(gòu)就是順序結(jié)構(gòu),除非特別指明,否則就按照順序一句一句執(zhí)行順序結(jié)構(gòu)是最簡(jiǎn)單的算法結(jié)構(gòu),語(yǔ)句與語(yǔ)句之間,框與框之間是按從上到下的順序進(jìn)行的,它是由若干個(gè)依次執(zhí)行的處理步驟組成的,它是任何一個(gè)算法都離不開的一種基本算法結(jié)構(gòu) 2021-10-10
-
Java 內(nèi)置Http Server構(gòu)建web應(yīng)用案例詳解
這篇文章主要介紹了Java 內(nèi)置Http Server構(gòu)建web應(yīng)用案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下 2021-09-09
-
java并發(fā)編程專題(一)----線程基礎(chǔ)知識(shí)
這篇文章主要介紹了java并發(fā)編程線程的基礎(chǔ)知識(shí),文中講解非常詳細(xì),幫助大家更好的學(xué)習(xí)JAVA并發(fā)編程,感興趣想學(xué)習(xí)JAVA的可以了解下 2020-06-06
-
springboot使用war包部署到外部tomcat過(guò)程解析
這篇文章主要介紹了springboot使用war包部署到外部tomcat過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下 2020-01-01
-
JAVA中通過(guò)Hibernate-Validation進(jìn)行參數(shù)驗(yàn)證
這篇文章主要介紹了JAVA中通過(guò)Hibernate-Validation進(jìn)行參數(shù)驗(yàn)證,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧 2019-04-04
-
Java與SpringBoot對(duì)redis的使用方式
這篇文章主要介紹了Java與SpringBoot對(duì)redis的使用方式,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下 2022-08-08
最新評(píng)論
抽象類
java語(yǔ)言,聲明類時(shí) abstract
class Db{} 說(shuō)明Db類為抽象類。 java語(yǔ)言中,抽象方法是說(shuō)沒有方法的實(shí)現(xiàn)(方法體)此方法為抽象方法,只有抽象類和接口中才可以有抽象方法。
聲明抽象類
聲明抽象類很簡(jiǎn)單,加個(gè)abstract關(guān)節(jié)字就行。
public abstract class AA { }
聲明抽象方法
在抽象類中聲明一個(gè)抽象方法,抽象方法沒有方法體,就是說(shuō)現(xiàn)在這個(gè)方法就是個(gè)空架子。
public abstract class AA { public abstract int a(int i); }
案例
描述:
- 小米手機(jī)生產(chǎn)廠生產(chǎn)手機(jī),小米手機(jī)廠內(nèi)部分為兩個(gè)分廠,一個(gè)是紅米手機(jī)廠,一個(gè)是黑米手機(jī)廠。
- 紅米手機(jī)特點(diǎn)是屏幕大,充電快。
- 黑米手機(jī)特點(diǎn)是發(fā)熱,音質(zhì)好。
實(shí)現(xiàn):
- 先聲明一個(gè)抽象類 小米手機(jī)廠類,小米手機(jī)廠類里有兩個(gè)抽象方法分別為a和b,還有一個(gè)定義過(guò)的方法c
- 再聲明一個(gè)紅米手機(jī)廠類繼承小米手機(jī)廠,并且實(shí)現(xiàn)方法a和方法b
- 再聲明一個(gè)黑米手機(jī)廠類繼承小米手機(jī)廠,并且實(shí)現(xiàn)方法a和方法b
代碼:
Mi.java
public abstract class Mi { public abstract void a(); public abstract void b(); public void c(){ System.out.println("小米手機(jī)好"); } }
Hong.java
public class Hong extends Mi { @Override public void a() { System.out.println("紅米手機(jī)屏幕大"); } @Override public void b() { System.out.println("紅米手機(jī)充電快"); } }
Hei.java
public class Hei extends Mi { @Override public void a() { System.out.println("黑米手機(jī)發(fā)熱"); } @Override public void b() { System.out.println("黑米手機(jī)音質(zhì)好"); } }
測(cè)試:
public class Test { public static void main(String[] args) { Hong hong = new Hong(); Hei hei = new Hei(); hong.a(); hong.b(); hong.c(); hei.a(); hei.b(); hei.c(); } }
這個(gè)案例的主要描述了抽象方法的一個(gè)應(yīng)用場(chǎng)景,紅米和黑米是小米的一個(gè)分支,他們有小米的部分功能,但是他們還想有自己的特色。那么就可以通過(guò)實(shí)現(xiàn)小米的兩個(gè)抽象方法來(lái)實(shí)現(xiàn)自己的特色。并且小米只聲明了兩個(gè)抽象方法,限制了兩個(gè)子廠的特色,讓他們只能增加兩個(gè)特色,不能無(wú)限制的隨意增加多個(gè)特色。
使用規(guī)則
使用規(guī)則
抽象類必須被繼承,抽象方法必須被重寫。
抽象類中的抽象方法只需聲明,無(wú)需實(shí)現(xiàn),沒有方法體
抽象類不能被實(shí)例化,抽象類不一定要包含抽象方法,而定義抽象方法的類必須是抽象類。
抽象類包含的抽象方法必須在其子類中被實(shí)現(xiàn),否則該子類也必須是抽象類。
抽象類可以有構(gòu)造方法供子類實(shí)例化對(duì)象
抽象類不能直接實(shí)例化使用,一般用的是抽象類的子類,
A a = new B();
A和B之間的關(guān)系,繼承關(guān)系,接口實(shí)例關(guān)系。
類:方法+屬性+靜態(tài)程序段+初始化程序段
抽象類:方法+抽象方法+屬性+靜態(tài)程序段+初始化程序段
抽象類本質(zhì)
1.從類的組成上看其是抽象方法和非抽象方法的集合,還有屬性(常量)。
2.從設(shè)計(jì)的角度來(lái)看,實(shí)際上抽象類定義了一套規(guī)范(抽象方法)。(規(guī)范)
接口
接口(英文:Interface),在JAVA編程語(yǔ)言中是一個(gè)抽象類型,是抽象方法的集合,接口通常以interface來(lái)聲明。一個(gè)類通過(guò)繼承接口的方式,從而來(lái)繼承接口的抽象方法。 接口并不是類,編寫接口的方式和類很相似,但是它們屬于不同的概念。類描述對(duì)象的屬性和方法。接口則包含類要實(shí)現(xiàn)的方法。 除非實(shí)現(xiàn)接口的類是抽象類,否則該類要定義接口中的所有方法。 接口無(wú)法被實(shí)例化,但是可以被實(shí)現(xiàn)。一個(gè)實(shí)現(xiàn)接口的類,必須實(shí)現(xiàn)接口內(nèi)所描述的所有方法,否則就必須聲明為抽象類。另外,在 Java 中,接口類型可用來(lái)聲明一個(gè)變量,他們可以成為一個(gè)空指針,或是被綁定在一個(gè)以此接口實(shí)現(xiàn)的對(duì)象。
聲明接口
interface關(guān)鍵字聲明接口AA
public interface AA { }
案例
描述:
富士康加工廠里有兩個(gè)分廠,分別是加工華為手機(jī)和蘋果手機(jī)。每個(gè)手機(jī)是由電池、芯片、屏幕這三個(gè)硬件組成。兩個(gè)品牌的手機(jī)都是由這三個(gè)硬件組成但是硬件的型號(hào)不同。
但是這兩個(gè)廠都有一個(gè)統(tǒng)一的加工程序把手機(jī)組裝
實(shí)現(xiàn):
聲明富士康接口,接口內(nèi)聲明一個(gè)抽象方法用來(lái)組裝手機(jī)。
華為和蘋果兩個(gè)類分別實(shí)現(xiàn)富士康接口,并且實(shí)現(xiàn)里面的方法。
富士康接口
public interface Fu { void zhuang(); }
華為加工廠
public class HuaWei implements Fu { private final String xin = "麒麟芯片"; private final String dian = "6000am電池"; private final String ping = "大猩猩屏幕"; @Override public void zhuang() { System.out.printf("華為手機(jī):%s,%s,%s %n", xin, dian, ping); } }
蘋果加工廠
public class Iphoe implements Fu { private final String xin = "A15芯片"; private final String dian = "3000am電池"; private final String ping = "小猩猩屏幕"; @Override public void zhuang() { System.out.printf("蘋果手機(jī):%s,%s,%s %n", xin, dian, ping); } }
測(cè)試
public class Test { public static void main(String[] args) { HuaWei huaWei = new HuaWei(); Iphoe iphoe = new Iphoe(); huaWei.zhuang(); iphoe.zhuang(); } }
接口特性
接口中每一個(gè)方法也是隱式抽象的,接口中的方法會(huì)被隱式的指定為 public abstract(只能是 public abstract,其他修飾符都會(huì)報(bào)錯(cuò))。
接口中可以含有變量,但是接口中的變量會(huì)被隱式的指定為 public static final 變量(并且只能是 public,用 private 修飾會(huì)報(bào)編譯錯(cuò)誤)。
接口中的方法是不能在接口中實(shí)現(xiàn)的,只能由實(shí)現(xiàn)接口的類來(lái)實(shí)現(xiàn)接口中的方法。
抽象類和接口的區(qū)別
- 抽象類中的方法可以有方法體,就是能實(shí)現(xiàn)方法的具體功能,但是接口中的方法不行。
- 抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是 public static final 類型的。
- 接口中不能含有靜態(tài)代碼塊以及靜態(tài)方法(用 static 修飾的方法),而抽象類是可以有靜態(tài)代碼塊和靜態(tài)方法。
- 一個(gè)類只能繼承一個(gè)抽象類,而一個(gè)類卻可以實(shí)現(xiàn)多個(gè)接口。
到此這篇關(guān)于Java 深入淺出解析面向?qū)ο笾橄箢惡徒涌诘奈恼戮徒榻B到這了,更多相關(guān)Java 抽象類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java程序結(jié)構(gòu)與常量變量難點(diǎn)解析
JAVA的基本結(jié)構(gòu)就是順序結(jié)構(gòu),除非特別指明,否則就按照順序一句一句執(zhí)行順序結(jié)構(gòu)是最簡(jiǎn)單的算法結(jié)構(gòu),語(yǔ)句與語(yǔ)句之間,框與框之間是按從上到下的順序進(jìn)行的,它是由若干個(gè)依次執(zhí)行的處理步驟組成的,它是任何一個(gè)算法都離不開的一種基本算法結(jié)構(gòu)2021-10-10Java 內(nèi)置Http Server構(gòu)建web應(yīng)用案例詳解
這篇文章主要介紹了Java 內(nèi)置Http Server構(gòu)建web應(yīng)用案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09java并發(fā)編程專題(一)----線程基礎(chǔ)知識(shí)
這篇文章主要介紹了java并發(fā)編程線程的基礎(chǔ)知識(shí),文中講解非常詳細(xì),幫助大家更好的學(xué)習(xí)JAVA并發(fā)編程,感興趣想學(xué)習(xí)JAVA的可以了解下2020-06-06springboot使用war包部署到外部tomcat過(guò)程解析
這篇文章主要介紹了springboot使用war包部署到外部tomcat過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01JAVA中通過(guò)Hibernate-Validation進(jìn)行參數(shù)驗(yàn)證
這篇文章主要介紹了JAVA中通過(guò)Hibernate-Validation進(jìn)行參數(shù)驗(yàn)證,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Java與SpringBoot對(duì)redis的使用方式
這篇文章主要介紹了Java與SpringBoot對(duì)redis的使用方式,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08