【面试干货】抽象类的意义与应用

发布于:2024-06-22 ⋅ 阅读:(130) ⋅ 点赞:(0)


💖The Begin💖点点关注,收藏不迷路💖

在面向对象编程中,抽象类扮演着非常重要的角色。它们不仅为子类提供了一个公共的类型,还封装了子类中可能重复定义的内容,并允许定义抽象方法,这些方法由子类来实现具体的行为。

抽象类的意义可以用三句话来概括:

1、为其他子类提供一个公共的类型

2、封装子类中重复定义的内容

3、定义抽象方法,子类虽然有不同的实现,但是定义时一致的

1、为其他子类提供一个公共的类型

抽象类可以被视为一个模板或基类,它为所有继承自它的子类提供了一个公共的接口。这使得我们可以在不知道具体子类的情况下,就可以对它们进行某些操作。

例如,假设我们有一个Animal抽象类,它定义了一些所有动物都共有的属性(如nameage)和行为(如eat()sleep())。

然后我们可以有多个子类,如DogCatBird等,它们都继承自Animal类。这样,我们就可以创建一个Animal类型的数组或集合,并将这些不同类型的动物对象添加进去,然后进行统一的操作。

2、封装子类中重复定义的内容

在面向对象的编程中,我们经常会遇到子类之间共享某些属性和方法的情况。如果我们在每个子类中都重复定义这些属性和方法,那么不仅代码会变得冗余,而且维护起来也会非常困难。

通过抽象类,我们可以将这些共享的属性和方法封装在基类中,然后让子类继承这个基类。

这样,子类就可以直接使用这些属性和方法,而无需重复定义。这不仅可以减少代码量,还可以提高代码的可维护性。

3、定义抽象方法,子类虽然有不同的实现,但是定义时一致的

抽象类的一个重要特性就是它可以定义抽象方法。抽象方法是一种只有方法签名(方法名和参数列表),而没有方法体(即没有具体的实现)的方法。

子类必须实现抽象类中的所有抽象方法,否则子类也必须是抽象的。这种方式允许我们在基类中定义一些通用的行为,但具体的实现则交由子类来完成。

这样,我们可以确保所有的子类都遵循一定的行为规范,同时又可以允许它们根据自己的需求来实现这些行为。

4、示例代码

定义一个Animal抽象类,它包含了一个name属性、一个age属性、一个公共的eat()方法和一个抽象的makeSound()方法。

然后,我们定义了两个子类DogCat,它们都继承了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💖点点关注,收藏不迷路💖

网站公告

今日签到

点亮在社区的每一天
去签到