抽象方法是一种没有具体实现的方法,它只定义了方法的签名(名称、参数和返回类型),但不包括方法体。在Java中,抽象方法用来指定一个类必须提供的行为,而不提供每个行为的具体实现。这样,继承抽象方法的类必须提供每个抽象方法的具体实现,除非该类本身也被声明为抽象类。
前言
看视频学习的时候,总是听到这个名称,自己有点印象,但是比较模棱两可,写个文章加强一下概念知识
一、如何定义抽象方法
abstract class AbstractClass {
// 抽象方法声明,没有方法体
public abstract void abstractMethod();
// 普通方法可以有具体的实现
public void nonAbstractMethod() {
System.out.println("This is a non-abstract method.");
}
}
注意,如果一个类中包含了抽象方法,该类必须被声明为抽象类。抽象类本身不能被实例化,只能被继承。
二、如何判断一个方法是否为抽象方法(有点纸上谈兵了)
1.方法(仅供参考——不一定正确)
- 关键字:方法前面有
abstract
关键字。(也不一定——有一定是,没有不一定不是) - 方法体:方法没有具体的实现,即没有花括号
{}
包裹的代码块,而是直接以分号;
结束。 - 所在类的类型:抽象方法只能存在于抽象类或接口中。如果一个类中包含抽象方法,那么这个类也必须被声明为抽象类(使用
abstract
关键字)。接口中的方法默认是抽象的,即使不显式使用abstract
关键字
2.特别说明
- 在接口中定义的方法(在Java 8之前的版本)自动被认为是抽象方法,即使没有使用
abstract
关键字。从Java 8开始,接口还可以包含默认方法和静态方法,这两种方法都有具体的实现。 - 函数式接口是一种特殊的接口,它定义了一个抽象方法。由于这个特性,它们可以被实例化为lambda表达式或方法引用。尽管函数式接口可能还包含默认方法和静态方法,但它们仍然只有一个抽象方法。
- 抽象类可以没有任何抽象方法,但包含抽象方法的类必须声明为抽象类