首先來(lái)介紹一下基類(超類)的概念:當(dāng)一個(gè)類與另一個(gè)具有相同功能又不能直接集成的時(shí)候,需要抽取共同所屬關(guān)系,可以把他們抽取出來(lái)的作為一個(gè)基類。基類就是父類。
一、抽象類
public abstract class Animal {
public void eated(){
System.out.println("eat");
}
//抽象方法
public abstract void howl();
}
一、什么是抽象類?
抽象類,即可以理解為不具體的類,沒(méi)有具體的信息來(lái)描述它,比如上述代碼中的Animal類,Animal是什么樣子的,我們是描述不出來(lái)的,但是我們可以通過(guò)別的類來(lái)進(jìn)行特定的描述,比如貓等。同時(shí),人、手機(jī)等都是抽象類。抽象類用abstract關(guān)鍵字修飾,抽象類可以作為一個(gè)基類來(lái)使用。
二、使用抽象類時(shí)的注意事項(xiàng):
1抽象類不能被實(shí)例化,實(shí)例化的工作應(yīng)該交由它的子類來(lái)完成,它只需要有一個(gè)引用即可。
2抽象方法必須由子類來(lái)進(jìn)行重寫。
3只要包含一個(gè)抽象方法的抽象類,該方法必須要定義成抽象類,不管是否 還包含有其他方法。
4抽象類中可以包含具體的方法,當(dāng)然也可以不包含抽象方法。
5子類中的抽象方法不能與父類的抽象方法同名。
6abstract不能與final并列修飾同一個(gè)類。
7abstract 不能與private、static、final或native并列修飾同一個(gè)方法。
二、接口
一、什么是接口:
Java接口是一系列方法的聲明,是一些方法特征的集合,一個(gè)接口只有方法的特征沒(méi)有方法的實(shí)現(xiàn),因此這些方法可以在不同的地方被不同的類實(shí)現(xiàn),而這些實(shí)現(xiàn)可以具有不同的行為(功能)。
二、下面來(lái)舉一個(gè)例子:
提到接口,大家可能會(huì)想到USB接口,就用這個(gè)來(lái)舉例,電腦可以通過(guò)USB接口來(lái)連接外接設(shè)備,為外接設(shè)備提供電能,同時(shí)也能為電腦提供數(shù)據(jù)傳輸,即接口只有一些方法的特征卻沒(méi)有方法實(shí)現(xiàn),想要這些特征被實(shí)現(xiàn),就需要不同的類,即電腦和鼠標(biāo)等。
下附例子代碼:
1、USB的接口:在USB接口中寫出提供電量、數(shù)據(jù)傳輸?shù)姆椒?;接口的定義需要用到interface關(guān)鍵字。
public interface USB {
public void powerUp();
public void dataTransport();
}
2、鼠標(biāo)類:通過(guò)實(shí)現(xiàn)USB這個(gè)接口,來(lái)實(shí)現(xiàn)USB這個(gè)接口,一個(gè)類想要實(shí)現(xiàn)接口需要用到implements關(guān)鍵字。
public class Mouse implements USB{
@Override
public void powerUp() {
System.out.println("鼠標(biāo)供電");
}
@Override
public void dataTransport() {
System.out.println("鼠標(biāo)數(shù)據(jù)接通");
}
}
3、鍵盤類:通過(guò)實(shí)現(xiàn)USB這個(gè)接口,來(lái)實(shí)現(xiàn)USB這個(gè)接口,一個(gè)類想要實(shí)現(xiàn)接口需要用到implements關(guān)鍵字。
public class Keyboard implements USB{
@Override
public void powerUp() {
System.out.println("鍵盤供電");
}
@Override
public void dataTransport() {
System.out.println("鍵盤數(shù)據(jù)接通");
}
}
4、電腦類:在類中定義一個(gè)USB對(duì)象,寫出其set方法,用來(lái)實(shí)現(xiàn)USB的供電,數(shù)據(jù)傳輸功能。
public class Computer {
private USB usb;
public USB getUsb() {
return usb;
}
public void setUsb(USB usb) {
this.usb = usb;
usb.powerUp();
usb.dataTransport();
}
}
5、在Main中:new出Computer、Mouse、Keyboard的對(duì)象,將mouse、keyboard作為參數(shù)set給computer,來(lái)讓電腦實(shí)現(xiàn)鍵盤、鼠標(biāo)中的功能。
public class Main {
public static void main(String[] args) {
// write your code here
Computer computer = new Computer();
Mouse mouse = new Mouse();
computer.setUsb(mouse);
Keyboard keyboard = new Keyboard();
computer.setUsb(keyboard);
}
}
6、運(yùn)行結(jié)果:通過(guò)運(yùn)行,發(fā)現(xiàn)實(shí)現(xiàn)了鼠標(biāo)和鍵盤類中的功能。

三、關(guān)于接口的特點(diǎn)及注意事項(xiàng):
1、Java接口中的成員變量默認(rèn)都是public,static,final類型的(都可省略),必須被顯示初始化,即接口中的成員變量為常量(大寫,單詞之間用”_”分隔)
2、Java接口中的方法默認(rèn)都是public,abstract類型的(都可省略),沒(méi)有方法體,不能被實(shí)例化
3、Java接口中只能包含public,static,final類型的成員變量和public,abstract類型的成員方法
4、接口中沒(méi)有構(gòu)造方法,不能被實(shí)例化
5、一個(gè)接口不能實(shí)現(xiàn)(implements)另一個(gè)接口,但它可以繼承多個(gè)其它的接口
6、Java接口必須通過(guò)類來(lái)實(shí)現(xiàn)它的抽象方法
7、當(dāng)類實(shí)現(xiàn)了某個(gè)Java接口時(shí),它必須實(shí)現(xiàn)接口中的所有抽象方法,否則這個(gè)類必須聲明為抽象類
8、不允許創(chuàng)建接口的實(shí)例(實(shí)例化),但允許定義接口類型的引用變量,該引用變量引用實(shí)現(xiàn)了這個(gè)接口的類的實(shí)例
9、一個(gè)類只能繼承一個(gè)直接的父類,但可以實(shí)現(xiàn)多個(gè)接口,間接的實(shí)現(xiàn)了多繼承,并且沒(méi)有菱形缺陷 相當(dāng)于多繼承的優(yōu)化案。