抽象类
-
定义:Java允许在类中只声明方法而不提供方法的实现。这种只声明而没有方法体的方法称为抽象方法,而包含一个或多个抽象方法的类被称为抽象类。
-
抽象类在使用上有特殊的限制,即不能创建抽象类的实例。
-
Java中要将抽象类和抽象方法带上
abstract
标记。 -
如果一个非抽象类是一个抽象类的子类,它必须重写父类所有的抽象方法,且子类对抽象方法的重写不能降低访问权限。
接口
- 接口中声明了方法,但不定义方法体,因此接口只是定义了一组对外的公共接口。
- 与类相比,接口只规定了一个类的基本形式,不涉及任何实现细节。
- Java中使用
interface
关键字。 - 一个接口可以继承(
extends
)多个父接口,用逗号隔开。 - 一个类只能有一个父类,但是可以实现(
implements
)多个接口,逗号隔开。 - 接口方法默认是public,不可以使用其他权限修饰符。
- 接口和抽象类一样不能被实例化。
补充:
JDK8新增特性,接口中的方法不再是只能有抽象方法,他可以有静态方法和default方法。
接口:
public interface People {
default void sleep(){
System.out.println("睡觉~~");
}
default void work(){
System.out.println("工作~~");
}
static void test(){
System.out.println("静态方法测试~~");
}
void eat();
}
实现类:重写抽象方法即可,如果想要重写default
修饰的方法也是可以的。
public class Student implements People{
//重写抽象方法
@Override
public void eat() {
System.out.println("吃饭~~");
}
//重写default方法
@Override
public void work() {
System.out.println("学习");
}
}
测试:
public class Test {
public static void main(String[] args) {
People student = new Student();
student.eat();
student.sleep();
student.work();
}
}
结果:
吃饭~~
睡觉~~
学习
接口与抽象类的区别
- 接口可以多继承,抽象类不行
- 接口中,在jdk1.8之后可以用static和default去修饰方法并且实现,此时实现接口的子类可以调用default修饰的方法,接口名调用被static修饰的静态方法(default只能用于接口或者switch case上);而抽象类可以实现部分方法。
- 接口中只能有static、final变量, 而抽类象不是的。