【面试干货】抽象类的意义与应用
- 1、为其他子类提供一个公共的类型
- 2、封装子类中重复定义的内容
- 3、定义抽象方法,子类虽然有不同的实现,但是定义时一致的
- 4、示例代码
💖The Begin💖点点关注,收藏不迷路💖
|
在面向对象编程中,抽象类扮演着非常重要的角色。它们不仅为子类提供了一个公共的类型,还封装了子类中可能重复定义的内容,并允许定义抽象方法,这些方法由子类来实现具体的行为。
抽象类的意义可以用三句话来概括:
1、为其他子类提供一个公共的类型
2、封装子类中重复定义的内容
3、定义抽象方法,子类虽然有不同的实现,但是定义时一致的
1、为其他子类提供一个公共的类型
抽象类可以被视为一个模板或基类,它为所有继承自它的子类提供了一个公共的接口。这使得我们可以在不知道具体子类的情况下,就可以对它们进行某些操作。
例如,假设我们有一个Animal
抽象类,它定义了一些所有动物都共有的属性(如name
、age
)和行为(如eat()
、sleep()
)。
然后我们可以有多个子类,如Dog
、Cat
、Bird
等,它们都继承自Animal
类。这样,我们就可以创建一个Animal
类型的数组或集合,并将这些不同类型的动物对象添加进去,然后进行统一的操作。
2、封装子类中重复定义的内容
在面向对象的编程中,我们经常会遇到子类之间共享某些属性和方法的情况。如果我们在每个子类中都重复定义这些属性和方法,那么不仅代码会变得冗余,而且维护起来也会非常困难。
通过抽象类,我们可以将这些共享的属性和方法封装在基类中,然后让子类继承这个基类。
这样,子类就可以直接使用这些属性和方法,而无需重复定义。这不仅可以减少代码量,还可以提高代码的可维护性。
3、定义抽象方法,子类虽然有不同的实现,但是定义时一致的
抽象类的一个重要特性就是它可以定义抽象方法。抽象方法是一种只有方法签名(方法名和参数列表),而没有方法体(即没有具体的实现)的方法。
子类必须实现抽象类中的所有抽象方法,否则子类也必须是抽象的。这种方式允许我们在基类中定义一些通用的行为,但具体的实现则交由子类来完成。
这样,我们可以确保所有的子类都遵循一定的行为规范,同时又可以允许它们根据自己的需求来实现这些行为。
4、示例代码
定义一个Animal
抽象类,它包含了一个name
属性、一个age
属性、一个公共的eat()
方法和一个抽象的makeSound()
方法。
然后,我们定义了两个子类Dog
和Cat
,它们都继承了Animal
类,并实现了makeSound()
方法。这样,我们就可以通过调用makeSound()
方法来让不同的动物发出不同的声音。
// 抽象类 Animal
public abstract class Animal {
protected String name; // 名字
protected int age; // 年龄
// 公共方法
public void eat() { // 吃东西
System.out.println("Animal is eating.");
}
// 抽象方法
public abstract void makeSound(); // 发出声音
// main方法
public static void main(String[] args) {
Animal dog = new Dog();
dog.makeSound(); // 输出 "Dog is barking."
Animal cat = new Cat();
cat.makeSound(); // 输出 "Cat is meowing."
}
}
// 子类 Dog
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Dog is barking."); // 狗在叫
}
}
// 子类 Cat
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Cat is meowing."); // 猫在喵喵叫
}
}
💖The End💖点点关注,收藏不迷路💖
|