更多 Java 基礎知識方面的文章,請參見文集《Java 基礎知識》
抽象類
- 用 abstract 修飾類名
- 不能用 final 修飾類名,因為 final 表示該類不能繼承
- 抽象類可以包含具體方法,也可以包含抽象方法:
- 可以全部是具體方法,不包含任何的抽象方法。即使是這種情況下,該抽象類也不能被實例化。
- 也可以全部是抽象方法,不包含任何的具體方法
- 關于抽象方法:
- 用 abstract 修飾方法名
- 不能用 final 修飾方法名
- 不能用 static 修飾方法名
- 抽象類可以包含成員變量
例如:
abstract class MyAbstract {
public int i;
public void f1() {
}
abstract public void f2();
}
接口
- 用 interface 修飾類名
- 不能用 final 修飾接口名,因為 final 表示該類不能繼承
- 接口可以包含成員變量:
- 編譯器自動添加 public static final
- 需要在聲明時初始化成員變量,例如
int i = 1
- 接口可以包含抽象方法:
- 編譯器自動添加 public abstract
- 不能用 final 修飾方法名
- 不能用 static 修飾方法名
- Java 8 之后,接口也可以包含默認方法,即具體方法
例如:
interface MyInterface {
// 編譯器自動添加 public static final
int i = 1;
// 編譯器自動添加 public abstract
void f1();
// Java 8 之后,接口也可以包含默認方法
default void f2() {
// to do
}
}
接口不可以實現(xiàn)接口
接口可以繼承接口,但是不能繼承類
例如:
interface MyInterface1 {
void f1();
}
// 接口可以繼承接口
interface MyInterface2 extends MyInterface1 {
void f2();
}
class InterfaceImpl implements MyInterface2 {
public void f1() {
}
public void f2() {
}
}
類的定義中可以包含接口
例如:
class MyClass {
public void f1() {
InnerInterface impl = new InnerInterface() {
public void f2() {
}
};
}
interface InnerInterface {
public void f2();
}
}
接口的定義中可以包含類
例如:
interface MyInterface {
void f1();
class InnerClass {
public void f2() {
}
}
}