1、从定义方面讲:
用abstract关键字修饰的类就是抽象类,抽象类无法实例化。
使用interface关键字定义接口。
那么“抽象类”与“接口”有什么区别呢?我们将从不同方面来进行比较:
2、从继承方面讲:只能extends继承一个类,可以implements实现多个接口
class Student extends PresonA implements PersonB,PersonC{
}
abstract class PresonA{
//抽象方法
public abstract void run();
public abstract String getName();
}
interface PersonB{
//抽象方法(在接口中定义抽象方法,可以不加abstract关键字)
public void runB();
public String getNameB();
}
interface PersonC{
public void runC();
public String getNameC();
}
3、从定义方法上讲:“抽象类”与“接口”都可以定义抽象方法,而在定义普通方法时,从JDK1.8开始,接口允许定义默认方法(带有方法体的方法)
public default void dosth() {
//默认方法,允许存在方法体,相当于“接口中的普通方法”
}
4、从构造方法上讲:抽象类中可以定义抽象方法,而接口中不允许有抽象方法。
5、从定义成员变量上讲:“抽象类”可以实例化成员变量,而接口中的成员变量是“常量”,不允许修改。
public class Demo03 {
public static void main(String[] args) {
PresonA.max = 23;
PresonA.max =44;
}
}
abstract class PresonA{
//成员"变量"
public static int max = 45;
//常量
public static final int MAX = 45;
}
interface PersonB{
//成员变量
//常量
public static int max = 0; //不允许修改
}
需要补充的是:
//父类的引用,指向子类的对象
PresonA pa = new Student();
pa.run();
pa.getName();
//接口的引用,指向实现类的对象
PersonB pb = new Student();
pb.runB();
pb.getNameB();