在Java中,抽象类和接口是两种不同的概念,它们各自有一些独特的特点。下面分别介绍这两种概念的特点:
抽象类 (Abstract Class)
-
定义:
- 抽象类是一种不能被实例化的类,它通常包含一些抽象方法(没有方法体的方法)和/或具体实现的方法。
- 抽象类可以有构造器、字段、具体方法和抽象方法。
-
继承:
- 一个非抽象类继承抽象类时,必须实现抽象类中的所有抽象方法。
- 抽象类也可以继承另一个抽象类或普通类。
-
实例化:
- 由于抽象类不能被实例化,所以不能直接创建抽象类的对象。
- 必须通过继承抽象类的子类来创建对象。
-
访问修饰符:
- 抽象方法必须是public、protected或package-private的,不能是private。
- 抽象类本身可以具有任何访问级别(public, protected, package-private, 或者没有访问修饰符)。
-
实现细节:
- 抽象类可以提供一些默认行为或共享代码,这些行为可以在子类中重写或直接使用。
接口 (Interface)
-
定义:
- 接口是一组抽象方法的集合,它定义了一种行为规范。
- 在Java 8及之后的版本中,接口还可以包含默认方法(default methods)和静态方法。
-
实现:
- 类可以通过implements关键字实现一个或多个接口。
- 类实现了接口就必须提供接口中所有抽象方法的具体实现。
-
多继承:
- 接口支持多重继承,一个类可以实现多个接口。
- 这样可以弥补Java单继承带来的限制。
-
访问修饰符:
- 接口中所有的方法默认都是public abstract的(在Java 8之前必须显式声明为abstract),而在Java 8之后可以声明为public default或public static。
- 接口中的字段默认都是public static final的,通常用来定义常量。
-
默认方法与静态方法:
- Java 8引入了接口中的默认方法和静态方法,这样可以在不修改现有实现类的情况下添加新功能。
- 默认方法以default关键字声明,静态方法以static关键字声明。
-
命名习惯:
- 接口名通常以“Interface”结尾,尽管这不是强制性的。
总结来说,抽象类更倾向于提供部分实现和行为,而接口则更多地关注于定义行为规范。选择使用抽象类还是接口取决于你的设计需求。如果你想要提供一些默认的行为或者共享的状态,那么抽象类是一个更好的选择。如果你希望定义一个严格的契约,那么接口将是一个更合适的选择。
标签:Java,默认,接口,抽象类,方法,public From: https://blog.csdn.net/cuimouren66888/article/details/140746603