在Java中,abstract class 是一种参考类型,用于给你的程序添加一个抽象层。
一个abstract class ,不能直接用来创建对象。相反,你需要在一个普通的(具体的)java类中扩展这个类来利用它。
下面的代码例子显示了你如何将一个名为Human 的抽象类扩展为一个名为Programmer 的类:
abstract class Human {
public void greetings() {
System.out.println("Hello World!");
}
}
class Programmer extends Human {}
Programmer nathan = new Programmer();
nathan.greetings(); // Hello World!
当你创建一个Programmer 类的实例时,你可以调用Human 抽象类中定义的greetings() 方法。
试图创建一个abstract class 的实例将导致Java抛出一个错误,如下图所示:
Human nathan = new Human();
// Error: 'Human' is abstract;
// cannot be instantiated
一个abstract class ,既可以有抽象的方法,也可以有非抽象的方法。一个普通的类只能有非抽象的方法。
一个abstract 方法需要被子类实现,否则Java将无法编译,如下图所示:
abstract class Human {
public void greetings() {
System.out.println("Hello World!");
}
abstract void work();
}
class Programmer extends Human {}
// Error: Class 'Programmer' must either be declared abstract
// or implement abstract method 'work()' in 'Human'
为了使上面的代码工作,你需要在Programmer 类中实现work() 方法:
class Programmer extends Human {
@Override
void work() {
System.out.println("Developing apps with Java!");
}
}
在abstract class 中声明为abstract 的所有方法都必须由继承它的类来实现。
在所有其他方面,abstract class 与普通类是一样的:
- 一个
abstract class可以有构造函数和静态方法 - 一个
abstract class,可以有最终方法和属性 - 一个
abstract class可以扩展另一个抽象类或普通类
一个abstract class 与一个interface 相似,但这两者之间有一些关键的区别,你需要了解。
在这里了解更多Ja:va接口与抽象类
现在你已经学会了如何在Java中创建一个abstract class ,干得好!👍