【Abstract Class】抽象类

抽象类在面向对象编程中扮演着设计模式中“模板”的角色,允许开发者定义一组接口和部分实现,要求子类完成剩余的具体实现。接下来,我将以一个简单的例子来说明抽象类的特点,尤其是抽象方法和具体方法的结合使用,以及如何通过抽象类实现多态性。

示例背景

假设我们要设计一个系统,该系统需要处理不同类型的动物,而所有动物都有共通的行为(如“吃”和“叫”),但每种动物具体的行为实现各不相同。我们可以使用抽象类来定义这些共通行为,让具体的动物子类去实现这些行为。

抽象类定义

首先,我们定义一个抽象类Animal,它包含一个抽象方法makeSound()(表示叫声)和一个具体方法eat()(表示吃的行为)。

public abstract class Animal {
    // 抽象方法,要求子类必须实现
    public abstract void makeSound();

    // 具体方法,所有子类可以直接使用
    public void eat() {
        System.out.println("动物在吃东西");
    }
}

具体子类

然后,我们定义两个具体动物类Dog和Cat,它们继承自Animal类,并实现各自的makeSound()方法。

public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("汪汪叫");
    }
}

public class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("喵喵叫");
    }
}

使用抽象类

最后,我们可以通过一个方法来演示多态性,这个方法接受一个Animal类型的参数,可以对任何动物调用eat()和makeSound()方法,而无需知道具体是什么动物。

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();
        Animal cat = new Cat();

        feedAndListen(dog);
        feedAndListen(cat);
    }

    public static void feedAndListen(Animal animal) {
        animal.eat();      // 所有动物都会吃
        animal.makeSound(); // 不同动物叫声不同,展示多态性
    }
}

输出结果

动物在吃东西
汪汪叫
动物在吃东西
喵喵叫

特点总结

  • 抽象方法:makeSound()定义在抽象类中,强迫子类实现自己的叫声逻辑,确保了多态性。
  • 具体方法:eat()在抽象类中直接实现,所有子类都可以直接使用,减少了代码重复。
  • 多态性:通过feedAndListen(Animal animal)方法,无论是狗还是猫,都能正确调用到各自实现的makeSound()方法,展示了抽象类在实现多态性上的优势。

这个例子充分展示了抽象类作为模板定义共性,同时通过抽象方法强制子类实现特定行为的特点,以及如何利用抽象类达到代码复用和设计的灵活性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CRE_MO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值