抽象類
如果一個類含有抽象方法,則稱這個類是抽象類,抽象類必須使用abstract 關鍵字修飾。因為抽象類中含有抽象方法,是以不能用抽象類建立對象。抽象方法:隻有聲明,沒有實作。如果一個類繼承了一個抽象類,他必須實作這個抽象類的全部抽象方法,否則,他依然是個抽象類。如下:
抽象類與普通類的差別
- 抽象類必須為public 或者protected,預設public;如果為private,則不能被繼承,子類無法實作該方法;
private abstract class A {
// Illegal modifier for the class A; only public, abstract & final are permitted
abstract void say_hello();
}
- 抽象類無法執行個體化;
public class AbstractI {
public static void main(String[] args) {
A a = new B();
a.say_hello();
}
}
abstract class A {
abstract void say_hello();
}
class B extends A {
@Override
void say_hello() {
System.out.println("hello B.");
}
}
- 抽象類的子類必須實作該抽象類的抽象方法,否則他也是abstract 類;
abstract class A {
abstract void say_hello();
}
class B extends A {} // The type B must implement the inherited abstract method A.say_hello()
abstract class A {
abstract void say_hello();
}
abstract class B extends A {}
接口
變量:必須,public static final
方法:必須,public abstract
抽象類 與 接口的差別
- 一次繼承(抽象類),多次實作(接口)
- 抽象類可以有自己的屬性和方法(隻要有一個abstract 方法就可以),接口必須是(public static final 變量 和 public abstract 方法)
- 普通類繼承抽象類若不實作所有抽象方法則必須為abstract 類;實作接口,卻不實作其所有抽象方法,則他必須為abstract 類 或者 接口繼承接口;