更多 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
}
}
接口不可以实现接口
接口可以继承接口,但是不能继承类
例如:
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() {
}
}
}