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

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

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