由 abstract 修饰的类称为抽象类,由 interface 修饰的类称为接口。
语法区别:
抽象类中可以有构造方法,接口中不允许有构造方法。
抽象类中可以有普通的成员变量和成员方法。抽象类中可以存在PRivate的成员变量和成员方法,但其抽象方法不能使用private修饰。接口中只有抽象方法和静态常量: 即接口中的方法只能是 public abstract修饰的抽象方法,成员变量只能是 public static final修饰的常量。
抽象类中可以有静态变量和静态方法,接口中没有静态方法,静态变量也只能是常量。
一个类可以继承一个抽象类,但可以实现多个接口。
应用设计方面:
接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约【即提供一种传参的规范】。而抽象类在代码实现方面发挥作用,可以实现代码的重用。
Demo 代码案例:
abstract class TestAbs extends TestSub{ //抽象类可以有静态的成员方法 public static void main(){} //抽象类中可以有构造方法 public TestAbs(){} //抽象类中可以有成员变量 private int a=1; //抽象类中可以有静态成员变量 private static int b=1; //抽象类中,除private外其余的修饰符都可以修饰抽象方法 protected abstract void a(); private void b(){ TestAbs.main(); }}interface D{ /** * 接口中不能有构造方法 * 默认的成员变量是常量,默认为 public static final * 接口中的方法默认是:public abstract 修饰 * 接口中不能存在普通方法 */ int a=1;}新闻热点
疑难解答