前言ide
一、在Java中 ,實現抽象類的機制有兩種:抽象類(abstract class)和接口(interface).測試
二、二者很是類似,甚至能夠相互能夠相互替換,所以不少的開發者對於兩者的選擇上很是的隨意,其實,兩者的開發區別仍是很大的。.net
目錄接口
一、知識儲備:抽象是什麼開發
二、抽象類的兩種實現方式get
抽象類示例class
// 定義1抽象動物類Animal,提供抽象方法 = cry()
public abstract class Animal {
public abstract void cry();
} 方法
// 貓、狗 = 動物類的子類
// 因爲cry()爲抽象方法,因此Cat、Dog必需要實現cry()
public class Cat extends Animal{ im
@Override
public void cry() {
System.out.println("貓叫:喵喵...");
}
} static
public class Dog extends Animal{
@Override
public void cry() {
System.out.println("狗叫:汪汪...");
}
}
// 測試
public class Test {
public static void main(String[] args) {
Animal a1 = new Cat();
Animal a2 = new Dog();
a1.cry();
a2.cry();
}
}
// 運行結果
貓叫:喵喵...
狗叫:汪汪
三、接口
示例:
interface Demo{
void method1();
void method2();
}
class Test implements Demo{
void method1();
void method2();
}
4、兩者的區別
5、實例講解
下面的實例,能夠更好的去理解關於接口和抽象類的使用
5.1.需求描述:
需求一:有一類門,基本功能有開門和關門
需求二:有一類門,基於上面的需求增長了報警器功能。
5.2需求實現:該需求的實現方式有三種
一、只使用抽象類 二、只使用接口 三、同時使用抽象類和接口
示例:
// 方案1:只使用抽象類
abstract class Door{
abstract void open();
abstract void close();
abstract void alarm();
}
// 具體使用時
class AlarmDoor extends Door {
void open(){}
void close(){}
void alarm(){}
}
// 方案2:只使用接口
interface Door{
void open();
void close();
void alarm();
}
// 具體使用時
class AlarmDoor implements Door {
void open(){}
void close(){}
void alarm(){}
}
// 方案3:同時使用抽象類 & 接口
// 對於需求1 = 抽象1類事物,即 使用抽象類
abstract class Door{
abstract void open();
abstract void close();
}
// 對於需求2 = 抽象事物中的某個行爲, 即 使用 接口
interface Alarm{
void alarm();
}
// 具體使用時 class AlarmDoor extends Door implements Alarm{ void open(){} void close(){} void alarm(){} }