抽象類(lèi)
抽象類(lèi)的基本概念
抽象方法
在理解抽象類(lèi)之前,先了解抽象方法,抽象方法是指只經(jīng)過(guò)聲明而未實(shí)現(xiàn)(沒(méi)有方法體{})的方法,抽象方法定義時(shí)要使用abstract關(guān)鍵字。
-
普通方法
public void example(){} -
抽象方法
public abstract void example();
抽象類(lèi)的最大特點(diǎn)是包含抽象方法,抽象類(lèi)用abstract關(guān)鍵字定義。抽象方法必須在抽象類(lèi)里面,而抽象類(lèi)可以沒(méi)有抽象方法
抽象類(lèi)的使用原則
- 抽象類(lèi)必須擁有子類(lèi),使用extends繼承,一個(gè)子類(lèi)只能繼承一個(gè)抽象類(lèi)
- 子類(lèi)(如果不是抽象類(lèi))必須覆寫(xiě)該抽象類(lèi)的全部抽象方法
- 抽象類(lèi)對(duì)象不能被實(shí)例化,需要通過(guò)向上轉(zhuǎn)型方式,利用子類(lèi)進(jìn)行實(shí)例化操作
舉個(gè)栗子
//這是一個(gè)抽象類(lèi)
public abstract class A {
public void print() {
System.out.println("這是一個(gè)普通方法");
}
//定義抽象方法
public abstract void get();
}
public class Impl extends A {
@Override
public void get() {
System.out.println("這是一個(gè)抽象方法");
}
}
public class TestDemo {
public static void main(String[] args) {
A a = new Impl(); //向上轉(zhuǎn)型,通過(guò)子類(lèi)來(lái)實(shí)例化抽象類(lèi)對(duì)象
a.print();
a.get();
}
}
抽象類(lèi)的應(yīng)用
接口
什么是接口
如果一個(gè)類(lèi)定義時(shí)全部由抽象方法和全局常量組成,那么這個(gè)類(lèi)就稱(chēng)為接口,接口使用
interface關(guān)鍵字
接口的使用原則
- 每一個(gè)接口必須定義子類(lèi),即接口的作用就是被實(shí)現(xiàn),子類(lèi)使用
implements關(guān)鍵字實(shí)現(xiàn)接口 - 接口的子類(lèi)(如果不是抽象類(lèi)),必須覆寫(xiě)接口里的全部抽象方法
- 接口不能進(jìn)行實(shí)例化,利用接口的子類(lèi),采用對(duì)象的向上轉(zhuǎn)型方式,進(jìn)行接口對(duì)象的實(shí)例化操作
- 如果一個(gè)類(lèi)既要實(shí)現(xiàn)接口又要繼承抽象類(lèi),則先繼承后實(shí)現(xiàn)
- 接口的訪(fǎng)問(wèn)權(quán)限只有一種:
public
注意:接口不是類(lèi),一個(gè)用interface定義,一個(gè)用class定義
接口的應(yīng)用
- 使用接口定義標(biāo)準(zhǔn)
- 工廠(chǎng)設(shè)計(jì)模式
- 代理設(shè)計(jì)模式
接口與抽象類(lèi)的區(qū)別
語(yǔ)法層面
接口與抽象類(lèi)的區(qū)別
設(shè)計(jì)層面
抽象類(lèi)是對(duì)事物的抽象,即對(duì)類(lèi)的抽象,接口是對(duì)行為的抽象