Java 中的抽象类是一种特殊类型的类,它不能被实例化,只能作为其他类的基类使用。抽象类可以包含抽象方法和非抽象方法,并且可以被子类继承和实现。以下是关于 Java 抽象类的一些知识点和使用方法:
- 抽象类的定义:定义一个抽象类需要使用
abstract
关键字来修饰类名,而不是类中的某个方法。抽象类中可以包含抽象方法和非抽象方法,但它们都不能有实现,只能有定义。
例如,下面这个抽象类 Animal 就定义了一个抽象方法 cry():
public abstract class Animal {
public abstract void cry();
}
2. 抽象方法的定义和实现:抽象方法是一种没有实现的方法,只有方法的声明,没有方法体。抽象方法必须使用 abstract
关键字来修饰方法名,而且必须定义在抽象类中。子类必须实现抽象类中定义的所有抽象方法,否则子类也必须为抽象类。
例如,下面这个 Cat 类继承了上面的 Animal 类,并实现了 cry() 方法:
public class Cat extends Animal {
@Override
public void cry() {
System.out.println("miaomiao");
}
}
在实现抽象方法时,必须使用 @Override
注解来标记方法,这样编译器才能够检查出是否正确覆盖了父类中的抽象方法。
- 抽象类的特点:抽象类不能被实例化,只能被其他类继承使用。它可以包含非抽象方法,也可以包含私有的实例变量和构造方法。由于抽象类不能被实例化,所以不能直接调用它的构造方法,但是可以使用子类的构造方法来调用它的构造方法。
例如,下面这个 Animal 类就包含了一个非抽象方法 eat() 和一个私有实例变量:
public abstract class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println(name + " is eating.");
}
public abstract void cry();
}
在子类 Cat 中,可以使用 super
关键字来调用父类的构造方法,以初始化父类的 name 成员变量:
public class Cat extends Animal {
public Cat(String name) {
super(name);
}
@Override
public void cry() {
System.out.println("miaomiao");
}
}
4. 抽象类的使用:抽象类通常用于定义一些基本的行为和特征,而具体的行为和特征由子类来实现和拓展。抽象类可以提供一些缺省的实现,以便子类使用,也可以限制子类的实现方式。
例如,Animal 类提供了一个缺省的实现 eat() 方法,在子类中可以使用它来实现更复杂的行为。同时,Animal 类中定义了一个抽象方法 cry(),表示所有的动物都会叫,但是每种动物的叫声都不同,所以必须由子类来实现。
- 总之,Java 的抽象类是一种非常重要的面向对象编程概念,它可以帮助我们将类的行为和特征分离出来,并提供一些缺省的实现,以便子类使用和拓展。抽象类通常用于定义基本的行为和特征,而具体的行为和特征由子类来实现和扩展。在使用抽象类时,需要注意抽象类不能被实例化,只能被继承使用,子类必须实现父类中的所有抽象方法,否则子类也必须为抽象类。