Java超詳細(xì)介紹抽象類與接口的使用
1.抽象類的語(yǔ)法和特性
1.1語(yǔ)法
1.在Java中,一個(gè)類如果被abstract 修飾稱為抽象類,抽象類中被 abstract 修飾的方法稱為抽象方法,抽象方法不用給出具體的實(shí)現(xiàn)體。
// 抽象類:被abstract修飾的類
public abstract class Shape {
// 抽象方法:被abstract修飾的方法,沒有方法體
abstract public void draw();
abstract void calcArea();
// 抽象類也是類,也可以增加普通方法和屬性,也可以包含構(gòu)造方法
public double getArea() {
return area;
}
protected double area; // 面積
}1.2特性
1. 抽象類不能直接實(shí)例化對(duì)象
Shape shape = new Shape(); // 編譯出錯(cuò) -> 抽象類不能被實(shí)例化
2. 抽象方法不能是 private 的
abstract class Shape {
abstract private void draw();
}
// 編譯出錯(cuò) -> 抽象方法不能用private修飾注意:抽象方法沒有加訪問限定符時(shí),默認(rèn)是public.
3. 抽象方法不能被 final 和 static 修飾,因?yàn)槌橄蠓椒ň褪怯脕?lái)被子類重寫的,兩者是”天敵“;
public abstract class Shape {
abstract final void methodA();
abstract public static void methodB();
}
// 編譯報(bào)錯(cuò): final和static修飾抽象方法,會(huì)出問題,二者屬于”天敵“4. 抽象類必須被繼承,并且繼承后子類要重寫父類中的抽象方法,否則子類也是抽象類,必須要 使用 abstract 修飾
abstract class Shape {
abstract void draw();
abstract public void calcArea();
}
//1.實(shí)現(xiàn)抽象方法
class Cycle extends Shape {
@Override
void draw() {
System.out.println("●");
}
@Override
public void calcArea() {
System.out.println("Π*r*r");
}
}
//2.不實(shí)現(xiàn)抽象父類的抽象方法,但是將子類也定義為抽象類
abstract class Triangle extends Shape {
}5. 抽象類中不一定包含抽象方法,但是有抽象方法的類一定是抽象類
6. 抽象類中可以有構(gòu)造方法,供子類創(chuàng)建對(duì)象時(shí),初始化父類的成員變量
2.接口的語(yǔ)法和使用
2.1語(yǔ)法
1.接口的定義格式與類的定義差不多,只要把class改成interface關(guān)鍵字即可。
public interface IOperation {
public abstract void method1();
public void method2();
abstract void method3();
void method4();
}接口名的的注意事項(xiàng):1.接口的命名一般以大寫的 "I" 開頭;2.接口的名字一般使用形容詞性單詞
推薦:阿里編碼規(guī)范中約定, 接口中的方法和屬性不要加任何修飾符號(hào), 保持代碼的簡(jiǎn)潔性。
2.2特性
1.接口不能直接使用,必須要被一個(gè)類來(lái) "實(shí)現(xiàn)",并且這個(gè)類要實(shí)現(xiàn)這個(gè)接口中的所有抽象方法
public interface IOperation {
public abstract void method1();
abstract void method2();
}
class A implements IOperation {
//如果不重寫接口中的抽象方法,代碼在編譯期間就會(huì)報(bào)錯(cuò)
//如果不想重寫,那么這個(gè)類一定是抽象類
@Override
public void method1() {
}
@Override
public void method2() {
}
}2.接口與接口之間是繼承(extends)關(guān)系,類與接口之間是實(shí)現(xiàn)關(guān)系(implements)關(guān)系
public interface IOperation {
}
class A implements IOperation {
}
interface Io extends IOperation {
}3.接口類型是一種引用類型,不能實(shí)例化對(duì)象
4.接口中每一個(gè)方法都是public的抽象方法, 即接口中的方法會(huì)被隱式的指定為 public abstract(只能是public abstract,其他修飾符都會(huì)報(bào)錯(cuò))
public interface IOperation {
private void method() {
}
//編譯報(bào)錯(cuò)
}5. 接口中的方法是不能在接口中實(shí)現(xiàn)的,只能由實(shí)現(xiàn)接口的類來(lái)實(shí)現(xiàn)
public interface IOperation {
void method();
//編譯報(bào)錯(cuò):接口中的方法不能自己實(shí)現(xiàn)
public abstract void A() {
}
}6. 重寫接口中方法時(shí),不能使用 default 訪問權(quán)限修飾 7. 接口中可以含有變量,但是接口中的變量會(huì)被隱式的指定為 public static final 變量,不能改變
interface IA{
double a = 3.0; // 默認(rèn)被:final public static修飾
}
public class TestDemo {
public static void main(String[] args) {
System.out.println(IA.a); // 可以直接通過(guò)接口名訪問,說(shuō)明是靜態(tài)的
//編譯報(bào)錯(cuò)
IA.a = 2.0; // 說(shuō)明brand具有final屬性
}
}8. 接口中不能有靜態(tài)代碼塊和構(gòu)造方法
interface USB {
// 編譯失敗:接口中不能有構(gòu)造方法
public USB(){
}
{} // 編譯失敗:接口中不能有實(shí)例代碼塊
void openDevice();
void closeDevice();
}到此這篇關(guān)于Java超詳細(xì)介紹抽象類與接口的使用的文章就介紹到這了,更多相關(guān)Java抽象類與接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Controller層和Service層的類報(bào)錯(cuò)問題及解決方案
這篇文章主要介紹了關(guān)于Controller層和Service層的類報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Java實(shí)現(xiàn)微信紅包分配規(guī)則
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)仿微信紅包分配規(guī)則,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-02-02
Java編程實(shí)現(xiàn)計(jì)算兩個(gè)日期的月份差實(shí)例代碼
這篇文章主要介紹了Java編程實(shí)現(xiàn)計(jì)算兩個(gè)日期的月份差實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
用Java實(shí)現(xiàn)簡(jiǎn)單畫板功能
這篇文章主要為大家詳細(xì)介紹了用Java實(shí)現(xiàn)簡(jiǎn)單畫板功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
解決配置Feign時(shí)報(bào)錯(cuò)PathVariable annotation was empty
在配置Feign客戶端時(shí),如果遇到`@PathVariable`注解為空的問題,是因?yàn)樵诼暶鹘涌诜椒〞r(shí)沒有為`@PathVariable`注解提供`value`屬性,解決方法是為`@PathVariable`注解添加`value`屬性,這樣就可以避免報(bào)錯(cuò),并成功啟動(dòng)Feign客戶端2024-11-11
Idea 搭建Spring源碼環(huán)境的超詳細(xì)教程
這篇文章主要介紹了Idea 搭建Spring源碼環(huán)境,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
java實(shí)現(xiàn)讀取txt文件并以在每行以空格取數(shù)據(jù)
今天小編就為大家分享一篇java實(shí)現(xiàn)讀取txt文件并以在每行以空格取數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07

