diff --git a/AnimalSystem.java b/AnimalSystem.java new file mode 100644 index 0000000..4d0bcac --- /dev/null +++ b/AnimalSystem.java @@ -0,0 +1,80 @@ +/** + * 练习1:动物叫声系统 + * 需求:使用抽象类和接口改进动物系统 + * 1. 创建抽象类Animal,包含抽象方法makeSound() + * 2. 创建Dog和Cat继承Animal + * 3. 创建接口Swimmable,包含方法swim() + * 4. 让Dog实现Swimmable,Cat不实现 + * 5. 在main方法中测试多态调用 + */ + +// 游泳接口:定义会游泳的动物的行为规范 +interface Swimmable { + /** + * 游泳方法 + */ + void swim(); +} + +// 抽象动物类:所有动物的父类,定义通用行为 +abstract class Animal { + /** + * 抽象方法:发出声音,由具体子类实现 + */ + public abstract void makeSound(); +} + +// 狗类:继承Animal,实现Swimmable接口(会游泳) +class Dog extends Animal implements Swimmable { + /** + * 实现抽象方法:狗的叫声 + */ + @Override + public void makeSound() { + System.out.println("汪汪汪!"); + } + + /** + * 实现Swimmable接口:狗的游泳行为 + */ + @Override + public void swim() { + System.out.println("小狗在水里游泳~"); + } +} + +// 猫类:仅继承Animal,不实现Swimmable(不会游泳) +class Cat extends Animal { + /** + * 实现抽象方法:猫的叫声 + */ + @Override + public void makeSound() { + System.out.println("喵喵喵~"); + } +} + +// 主类:包含main方法,用于测试多态调用 +public class AnimalSystem { + public static void main(String[] args) { + // 1. 多态创建动物数组:父类引用指向子类对象 + Animal[] animals = {new Dog(), new Cat()}; + + // 2. 多态调用makeSound()方法,体现面向对象多态特性 + System.out.println("===== 动物叫声测试 ====="); + for (Animal animal : animals) { + animal.makeSound(); + } + + // 3. 测试游泳能力:只有实现Swimmable接口的Dog可以调用swim() + System.out.println("\n===== 游泳能力测试 ====="); + for (Animal animal : animals) { + // 类型判断:安全转型,避免类型转换异常 + if (animal instanceof Swimmable) { + ((Swimmable) animal).swim(); + } else { + System.out.println(animal.getClass().getSimpleName() + "不会游泳"); + } + } + } +} \ No newline at end of file