1. 程式人生 > >Java基礎5:抽象類和接口

Java基礎5:抽象類和接口

基礎 聲明 model expand 可能 str pre 繼承 fin

Java基礎5:抽象類和接口

1 抽象類一般會實現一部分操作,並且留一些抽象方法讓子類自己實現,比如Stringbuffer和Stringbuilder的父類abstractStringbuilder。

2 接口一般指一種規定,比如一個map接口中,可能需要實現增刪改查等功能,如果你想實現一個具體map,這些方法就必須按照規定去實現。

3 另外,一個類可以實現多個接口,但是不能繼承多個類。 然而接口卻可以繼承多個其他接口。這一點很神奇。

下面看一下具體的例子,有一些小細節平時可能不會註意。

class A {
?
}
interface M extends N,L{
?
}
interface N{
?
}
interface L{
?
}
interface 接口 {
public final int i = 1;//變量默認都為public final修飾
final A a = null;//基本數據類型和引用都一樣
//protected void a();//報錯
//private //報錯
public abstract void a();// 方法都是public abstract修飾的。
?
//void b(){} 報錯,接口裏的方法不能有方法體,也不能有{},只能有();
?
// final void b();
// 註意,抽象方法不能加final。因為final方法不能被重寫。
//但如果抽象方法不被重寫那就沒有意義了,因為他根本沒有代碼體。
?
}
abstract class 抽象類 {
public final int i = 1;//變量並沒有被pulic和final修飾,只是一般的成員變量
public final A a = null;
?
private void A(){}//抽象類可以有具體方法
abstract void AA();//抽象方法沒有方法體
?
//private abstract void B();//報錯,組合非法
// 因為private修飾的方法無法被子類重寫,所以和final一樣,使抽象方法無法被實現。
?
}
?
//抽象類也可以被實例化,舉例說明
abstract class B{
B() {
System.out.println("b init");
}
}
?
class C extends B{
C(){
super();
System.out.println("c init");
}
}
?
public class 接口對比抽象類 {
@Test
public void test() {
C c = new C();
//結果先實例化B,再實例化C。
//因為會調用到父類的構造方法。
}
}

抽象類(abstract class)和接口(interface)有什麽異同?

不同:

抽象類:

1.抽象類中可以定義構造器

2.可以有抽象方法和具體方法

3.抽象類中的成員可以是 private、默認、 protected、 public

4.抽象類中可以定義成員變量

5.有抽象方法的類必須被聲明為抽象類,而抽象類未必要有抽象方法

7.一個類只能繼承一個抽象類

接口:

1.接口中不能定義構造器

2.方法全部都是抽象方法

3.接口中的成員全都是 public 的

4.接口中定義的成員變量實際上都是常量 (public final)

6.一個類可以實現多個接口

相同:

1.不能夠實例化 (抽象類不能通過new 關鍵字實例化,但是構造方法可以能被調用)

2.可以將抽象類和接口類型作為引用類型

3.一個類如果繼承了某個抽象類或者實現了某個接口都需要對其中的抽象方法全部進行實現,否則該類仍然需要 被聲明為抽象類

Java基礎5:抽象類和接口