深入学习abstract关键字的使用,掌握抽象类和抽象方法的定义、继承和实现
抽象类是使用abstract
关键字修饰的类,它不能被直接实例化。抽象类通常用于定义一组相关类的通用特征和行为,同时强制子类实现特定的方法。
抽象方法是只有声明没有实现的方法,使用abstract
关键字修饰。抽象方法只能存在于抽象类中,子类必须重写所有的抽象方法。
// 抽象类示例
abstract class Animal {
protected String name;
// 构造方法
public Animal(String name) {
this.name = name;
}
// 具体方法
public void sleep() {
System.out.println(name + "正在睡觉...");
}
// 抽象方法
public abstract void makeSound();
public abstract void move();
}
通过动物类的例子来理解抽象类的基本用法。Animal抽象类定义了所有动物的通用特征,而具体的动物类实现各自特有的行为。
// 具体类:狗
class Dog extends Animal {
private String breed;
public Dog(String name, String breed) {
super(name);
this.breed = breed;
}
@Override
public void makeSound() {
System.out.println(name + "汪汪叫!");
}
@Override
public void move() {
System.out.println(name + "在地上跑来跑去");
}
// 狗特有的方法
public void wagTail() {
System.out.println(name + "摇尾巴表示友好");
}
}
通过几何图形的例子展示抽象类在数学计算中的应用。Shape抽象类定义了图形的通用特征,不同的图形类实现具体的计算方法。
abstract class Shape {
protected String color;
protected String name;
public Shape(String name, String color) {
this.name = name;
this.color = color;
}
// 抽象方法:计算面积
public abstract double calculateArea();
// 抽象方法:计算周长
public abstract double calculatePerimeter();
// 具体方法:显示图形信息
public void displayInfo() {
System.out.println("图形: " + name);
System.out.println("颜色: " + color);
System.out.println("面积: " + String.format("%.2f", calculateArea()));
System.out.println("周长: " + String.format("%.2f", calculatePerimeter()));
}
}
理解抽象类和接口的区别,有助于在实际开发中做出正确的设计选择。
特性 | 抽象类 | 接口 |
---|---|---|
关键字 | abstract class | interface |
继承 | 单继承 | 多实现 |
方法 | 可以有具体方法 | 默认抽象方法(Java 8+可有默认方法) |
变量 | 可以有实例变量 | 只能有常量 |
构造方法 | 可以有 | 不能有 |
访问修饰符 | 任意 | public |