抽象类
抽象类中含有抽象方法,只有申明,没有具体的实现,申明格式如下:
abstract void fun();
若一个类含有抽象方法,则这个类为抽象类,抽象类在类前需要用abstract关键字进行修饰。抽象类不可以直接创建对象,因为其含有未实现的方法。
[public] abstract class ClassName{
abstract void fun();
}
抽象类与一般类的区别:
1. 抽象类必须为public或者protected,缺省情况下为public;
2. 抽象类不能用来创建对象;
3. 若一个类继承抽象类,则它需要实现其中的抽象方法,若未实现,则它也为一个抽象类,需要用abstract关键字进行修饰。
接口
接口中的变量被隐式地指定(只能)为public static final变量,而方法被隐式地指定(只能)为public abstract方法。
接口是一种极度抽象的类型,比抽象类更加“抽象”,一般在接口中不定义变量。
[public] interface InterfaceName{
}
注意:
由于不支持默认方法的接口维护成本太高,若要为一个接口添加新的方法,则需要修改所有实现了该接口的类,因此,在 Java 8 中, 接口可以拥有默认的方法,用 default 关键字进行修饰,或者用 static 关键字修饰(表示该方法属于接口,可以直接通过接口进行调用)。
在 java 8 中,以下代码可以正常运行:
public interface InterExp {
void func1();
static void func2(){
System.out.println("func2");
}
static void func3(){
System.out.println("func3");
}
int a = 123;
int b = 23;
}
接口与抽象类的区别(java 8 之前,java 8 之后需注意上述说明)
1. 抽象类中可以含有普通方法,而接口中只有public abstract方法;
2. 抽象类中的成员变量可以是任意类型,而接口中只有public static final类型的变量;
3. 接口中不能含有静态代码块或静态方法,而抽象类无此要求;
4.一个类只能继承一个抽象类,但可以实现多个接口;
(语法层面)
5. 抽象类是对事物的抽象,即类抽象,而接口是对行为的抽象。抽象类是对整个类进行的抽象,包括属性,行为,而接口知识对类局部(行为)进行抽象;
6. 设计层面不同,抽象类作为很多子类的父类,它是一种模板设计,而接口是一种行为规范,是一种辐射式设计。