Java由淺入深通關(guān)抽象類與接口上
1.抽象類
1.1抽象類概念
我們都知道對象是通過類來進(jìn)行描述的,但是不是說所有的類都是用來描述對象的
一個類的類中沒有足夠的信息來描述一個具體的對象,這便是抽象類
抽象類的關(guān)鍵字:abstract
1.2抽象方法
首先還是看看之前寫過的類:
class Plant {
String name;
String source;
String genus;
public void trait() {
System.out.println("父類方法");
}
}
class Tree extends Plant {
@Override
public void trait() {
System.out.println("子類方法");
}
}既然trait方法是重寫的方法,那么父類的trait根本就沒有實現(xiàn)的必要,所以我們可以將其改成抽象方法
注意:抽象類可以沒有抽象方法,但抽象方法必須在抽象類里面
abstract class Plant {
String name;
String source;
String genus;
public abstract void trait();
}
class Tree extends Plant {
@Override
public void trait() {
System.out.println("子類方法");
}
}
1.3抽象類的細(xì)節(jié)
1.抽象類是用于被繼承的,所以無法實例化,除這點外它和普通的類沒有區(qū)別
2.抽象類里面可以沒有抽象方法,但抽象方法一定要在抽象類中
3.一個普通類繼承抽象類,要重寫抽象類里面所有的抽象方法
4.抽象類可以繼承抽象類,此時不需要重寫抽象方法
5.final無法修飾抽象類和抽象方法
6.抽象方法不能使用private和static修飾
可能會有人覺得奇怪:普通類也可以作為父類被繼承,為什么還要再弄一個抽象類出來?
我們不妨假設(shè)一個場景:你在實例化對象的時候?qū)嵗烁割悓ο?,如下?/p>
public static void main(String[] args) {
Plant tree=new Plant();
tree.trait();
}如果父類是普通類的話,此時編譯器不會報錯,直接調(diào)用父類的方法
如果父類是抽象類,因為抽象類無法被實例化,所以編譯器會直接報錯,這樣問題就能更早被發(fā)現(xiàn)
2.接口
2.1接口概念
所謂接口就是公共的行為規(guī)范準(zhǔn)則,比如說A4紙,A4紙的大小是210mm*297mm,那么你就只能按照這個規(guī)格來進(jìn)行生產(chǎn)
在Java中接口就可以看成是多個類的公共規(guī)范,是一種引用類型數(shù)據(jù)
接口關(guān)鍵字:interface
2.2接口的細(xì)節(jié)
接口同樣有一些需要注意的事項:
1.接口也是用來被其它類實現(xiàn)的,同樣不能實例化
2.接口里面的方法只能是抽象方法,默認(rèn)是public static修飾
3.接口的成員變量默認(rèn)是靜態(tài)常量,所以必須初始化
4.接口被實現(xiàn)所使用的關(guān)鍵字為implements,類實現(xiàn)接口依舊要重寫接口中所有的抽象方法
5.接口不能有構(gòu)造方法和靜態(tài)代碼塊
6.接口繼承接口使用extends
7.創(chuàng)建接口時,接口的命名一般以大寫的字母“I”開頭(建議,非硬性要求)
8.接口也可以實現(xiàn)多態(tài)
接口在Java中最主要的作用就是實現(xiàn)多繼承
Java中一個類只能繼承一個父類,但它可以實現(xiàn)多個接口
抽象類和接口有相似的地方,不過二者之間最本質(zhì)的區(qū)別就是抽象類可以有普通成員方法和普通成員變量,而接口中的方法只能是抽象方法
抽象類和接口介紹完畢,下一篇會介紹Java中一些比較重要的接口
到此這篇關(guān)于Java由淺入深通關(guān)抽象類與接口上的文章就介紹到這了,更多相關(guān)Java抽象類與接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
把Java程序轉(zhuǎn)換成exe,可直接運行的實現(xiàn)
這篇文章主要介紹了把Java程序轉(zhuǎn)換成exe,可直接運行的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
基于SpringBoot的Dubbo泛化調(diào)用的實現(xiàn)代碼
這篇文章主要介紹了基于SpringBoot的Dubbo泛化調(diào)用的實現(xiàn),從泛化調(diào)用實現(xiàn)的過程來看,我們可以對自己提供所有服務(wù)進(jìn)行測試,不需要引入調(diào)用的接口,減少代碼的侵入,需要的朋友可以參考下2022-04-04
Spring Framework遠(yuǎn)程代碼執(zhí)行漏洞分析(最新漏洞)
Spring Framework 是一個開源應(yīng)用框架,旨在降低應(yīng)用程序開發(fā)的復(fù)雜度,它具有分層體系結(jié)構(gòu),允許用戶選擇組件,同時還為 J2EE 應(yīng)用程序開發(fā)提供了一個有凝聚力的框架,對Spring遠(yuǎn)程代碼執(zhí)行漏洞相關(guān)知識感興趣的朋友一起看看吧2022-04-04
Spring Data JPA進(jìn)行數(shù)據(jù)分頁與排序的方法
這篇文章主要介紹了Spring Data JPA進(jìn)行數(shù)據(jù)分頁與排序的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-11-11
Java中字符串截取方法詳解及實際應(yīng)用小結(jié)
java中截取字符串的常用方法是使用String類的substring方法,本文通過實例代碼給大家介紹Java中字符串截取方法詳解及實際應(yīng)用小結(jié),感興趣的朋友跟隨小編一起看看吧2024-12-12
Java cglib為實體類(javabean)動態(tài)添加屬性方式
這篇文章主要介紹了Java cglib為實體類(javabean)動態(tài)添加屬性方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02

