接口:Java 8之前,接口内不能实现方法。接口方法不需要加修饰符,加与不加相当于都是public abstract。
public interface MyComparable {
int compareTo(Object other);
}
抽象类:
1、抽象方法和抽象类都使用abstract这个关键字来声明。
2、抽象方法是相对于具体方法而言的,具体方法有实现代码,而抽象方法只有声明,没有实现。
3、定义了抽象方法的类必须被声明为抽象类,不过,抽象类可以没有抽象方法。抽象类和具体类一样,可以定义具体方法、实例变量等,它和具体类的核心区别是,抽象类不能创建对象(比如,不能使用new Shape()),而具体类可以。与接口类似,抽象类虽然不能使用new,但可以声明抽象类的变量,引用抽象类具体子类的对象。
4、空方法体:抽象方法和抽象类看上去是多余的,对于抽象方法,不知道如何实现,定义一个空方法体不就行了吗?而抽象类不让创建对象,看上去只是增加了一个不必要的限制。
引入抽象方法和抽象类,是Java提供的一种语法工具,对于一些类和方法,引导使用者正确使用它们,减少误用。使用抽象方法而非空方法体,子类就知道它必须要实现该方法,而不可能忽略,若忽略Java编译器会提示错误。使用抽象类,类的使用者创建对象的时候,就知道必须要使用某个具体子类,而不可能误用不完整的父类。
public abstract class Shape {
//其他代码
public abstract void draw();
}