Browse Source

使用抽象类和接口改进动物系统

main
Wangyifei 4 days ago
parent
commit
3934af47ba
  1. 9
      w6/Animal.java
  2. 31
      w6/AnimalTest.java
  3. 9
      w6/Cat.java
  4. 14
      w6/Dog.java
  5. 27
      w6/README.md
  6. 9
      w6/Swimmable.java
  7. 16
      w6/ai协助记录.txt
  8. BIN
      w6/运行输出.jpg

9
w6/Animal.java

@ -0,0 +1,9 @@
/**
* 动物抽象父类定义所有动物的通用行为
*/
public abstract class Animal {
/**
* 抽象方法动物发出叫声由子类具体实现
*/
public abstract void makeSound();
}

31
w6/AnimalTest.java

@ -0,0 +1,31 @@
/**
* 主测试类验证多态调用
*/
public class AnimalTest {
public static void main(String[] args) {
// 1. 多态:父类引用指向子类对象
Animal dog = new Dog();
Animal cat = new Cat();
// 2. 调用makeSound方法,体现多态
System.out.println("=== 动物叫声测试 ===");
dog.makeSound();
cat.makeSound();
// 3. 测试游泳接口:Dog实现了Swimmable,Cat未实现
System.out.println("\n=== 游泳能力测试 ===");
if (dog instanceof Swimmable) {
((Swimmable) dog).swim();
} else {
System.out.println("这只动物不会游泳");
}
if (cat instanceof Swimmable) {
((Swimmable) cat).swim();
} else {
System.out.println("猫不会游泳");
}
// 4. 直接创建Dog对象测试
System.out.println("\n=== 直接调用Dog方法 ===");
Dog myDog = new Dog();
myDog.makeSound();
myDog.swim();
}
}

9
w6/Cat.java

@ -0,0 +1,9 @@
/**
* 猫类仅继承动物抽象类不实现游泳接口
*/
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("猫叫:喵喵喵!");
}
}

14
w6/Dog.java

@ -0,0 +1,14 @@
/**
* 狗类继承动物抽象类实现游泳接口
*/
public class Dog extends Animal implements Swimmable {
@Override
public void makeSound() {
System.out.println("狗叫:汪汪汪!");
}
@Override
public void swim() {
System.out.println("狗在游泳:狗刨式前进!");
}
}

27
w6/README.md

@ -0,0 +1,27 @@
#动物叫声系统
1.功能说明
基于Java抽象类和接口实现动物叫声系统,Dog和Cat继承Animal类实现叫声,Dog额外实现Swimmable接口实现游泳能力,在main方法中完成多态调用测试。
2.编译运行命令
javac AnimalTest.java
java AnimalTest
3.项目结构
src/
├── Animal.java # 动物抽象类
├── Swimmable.java # 游泳接口
├── Dog.java # 狗类(继承Animal+实现Swimmable)
├── Cat.java # 猫类(仅继承Animal)
└── AnimalTest.java # 主测试类

9
w6/Swimmable.java

@ -0,0 +1,9 @@
/**
* 游泳能力接口定义会游泳的动物的行为
*/
public interface Swimmable {
/**
* 游泳方法
*/
void swim();
}

16
w6/ai协助记录.txt

@ -0,0 +1,16 @@
# AI协助记录
一、开发过程中遇到的问题
1. 多态调用接口方法的问题
问题:使用`Animal`父类引用指向`Dog`对象时,无法直接调用`swim()`方法,编译报错。
解决:通过`instanceof`关键字判断对象是否实现了`Swimmable`接口,再进行强制类型转换后调用。
2. 抽象类与接口的使用混淆
问题:不清楚何时用抽象类、何时用接口,导致初始设计逻辑混乱。
解决:明确抽象类用于**继承通用属性/行为**(动物的叫声是所有动物的通用行为),接口用于**扩展额外能力**(游泳是部分动物的能力),因此`Animal`用抽象类,`Swimmable`用接口。
3. 方法重写的规范问题
问题:子类重写抽象方法时,忘记加`@Override`注解,代码可读性差。
解决:在所有重写方法上添加`@Override`注解,规范代码,同时让编译器检查重写是否正确。
二、优化调整
1. 增加`instanceof`判断,避免类型转换异常
2. 为所有类和方法添加JavaDoc注释,提升代码可读性
3. 补充多场景测试(父类引用+直接对象调用),完整验证多态特性

BIN
w6/运行输出.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Loading…
Cancel
Save