一.抽象类:
- 抽象类和抽象方法都必须用abstract关键字来修饰。
- 抽象类不能直接实例化,必须有子类(不能使用final定义),子类使用extends继承抽象类,一个子类只能继承一个抽象类。
- 子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法。
- 抽象类定义抽象方法时只需声明,而不需实现。
- 抽象类可以有构造方法,但必须在子类中被调用。
- 外部抽象类无法使用static声明,但内部抽象类可以static定义。
//举个例子:
abstract class A{
public abstract void p(); //抽象方法
static abstract class CD{ //静态内部抽象类
public abstract void g(); //抽象方法
}
}
class B extends A.CD{ //继承抽象类
public void g(){
System.out.println("java~");
}
}
public class Main{
public static void main(String args[]){
A.CD cd=new B(); //实例化对象
cd.g();
}
}
二.接口:
//定义抽象类
interface 接口名称
{
final 数据类型 成员名称=常量; //数据成员必须赋初值
abstract 返回值的数据类型 方法名称(参数……);//抽象方法
default 返回值的数据类型 方法名称(参数……);//默认方法
{……方法体……}
}
- 接口的数据成员必须初始化,且为常量。
- 接口的方法为abstract,需定义“抽象方法”。
- 接口必须有子类,子类用implements关键字可以同时实现多个接口,子类必须覆写接口中的全部抽象方法。
- 接口与抽象类的最大区别:子类可以同时实现多个接口。
- 一个接口可继承多个接口。
接口的实现:
class 类名称 implements 接口A ,接口B
{
……
}
继承抽象类实现接口:
//先继承后实现
class A extends B implements C,D{
……
}