接口类和接口的区别
抽象类和接口的区别在我们面试中经常被问到,日常开发中用的最多的是接口,那抽象类和接口的区别是什么呢?
抽象类
在面向对象的概念中,类是用来描绘用来描绘对象的,而抽象类是包含抽象方法的类,换言之抽象类是不能完全描绘对象的类。
所以抽象类是提供抽象方法用于继承的,不能实例化。
抽象类的定义:
抽象类是通过abstract修饰的。
抽象方法时通过abstract修饰的
抽象方法没有具体的方法内容,无方法体,需要在子类中具体定义。
继承抽象类的抽象方法需要继承抽象方法
子类继承父类使用extends。
子类可以继承的抽象方法中调用抽象类中的变量和成员方法(非私有默认为public)。
[public] abstract class ClassName {
// 变量
abstract void fun();
// 成员方法
// 构造函数
}
接口
我们定义一些通用的抽象方法和静态常量用于实现类的具体实现和调用,接口不是类。
接口的定义:
接口是通过interface修饰的。
接口中的方法默认是public static修饰的(也只能是public static)。
接口中的常量默认是public static final修饰的(也只能通过public static final修饰).
实现类实现接口通过implements。
实现类需要实现接口中所有的方法,而常量可以通过interfaName.静态常量来使用.
[public] interface InterfaceName {
[public static final] 类型 常量名;
[public abstract] 返回类型 methodName(arg) ;
[static|default]void methodName(args){
// 具体实现
}
}
抽象类和接口的区别
参数 | 抽象类 | 接口 |
---|---|---|
默认的方法实现 | 它可以有默认的方法实现 | 接口完全是抽象的(jdk1.7, jdk1.8新特性 static和default修饰的是可以有具体实现的)。 |
实现 | 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。 | 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现 |
构造器 | 抽象类可以有构造器 | 接口不能有构造器 |
与正常Java类的区别 | 抽象方法可以有public、protected和default这些修饰符 | 接口方法默认修饰符是public。你不可以使用其它修饰符。 |
访问修饰符 | 它可以有默认的方法实现 | 接口完全是抽象的(jdk1.7, jdk1.8新特性 static和default修饰的是可以有具体实现的)。 |
数量 | 可以继承单个抽象类 | 只能实现多个接口 |