一、抽象
1 抽象方法
抽象方法,仅有声明没有方法体
abstract void f();
2 抽象类
如果一个类有1个或多个抽象方法,则该类必须被限定为抽象类
abstract class A{}
抽象方法中可以有非抽象方法
从一个抽象类继承,必须为基类所有的抽象方法提供方法定义,不然派生类依旧为抽象类
二、接口
完全抽象的类,全是抽象方法
interface A{}
接口中的方法默认是public,也必须是public
接口中任何域都自动是static和final的
继承接口用implements,一个类可以继承多个接口
三、接口和抽象类的区别
抽象类 | 接口 | |
---|---|---|
定义 | abstract class | interface |
构造器 | 可以有 | 不可 |
成员变量 | 默认是default | 默认是public static final,即常量 |
静态方法 | 可以有 | 可以有 |
默认方法 | 不可 | 可以有 |
抽象方法 | 可以有 | 可以有 |
其他方法 | 任意 | 除了默认方法和静态方法, 不可以有方法体 |
interface F1{
static void f(){
System.out.println("interface : static function output");
}
int a = 0;
static int b = 54;
void f1();
default void f2(){
System.out.println("interface : default function output");
}
abstract void f3();
}
abstract class F2{
public F2(){}; // 1。可以定义构造器
int a; // 2。可以定义成员变量,并且不需要赋初值
static int b; // 3。可以定义类变量,并且不需要赋初值
static void f(){ // 4。可以定义静态方法
System.out.println("abstract class : static function output");
}
void f1(){}; // 5。定义除抽象方法外,必须要有方法踢
abstract void f2(); //
}