8 changed files with 115 additions and 0 deletions
@ -0,0 +1,9 @@ |
|||
/** |
|||
* 动物抽象父类,定义所有动物的通用行为 |
|||
*/ |
|||
public abstract class Animal { |
|||
/** |
|||
* 抽象方法:动物发出叫声,由子类具体实现 |
|||
*/ |
|||
public abstract void makeSound(); |
|||
} |
|||
@ -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(); |
|||
} |
|||
} |
|||
@ -0,0 +1,9 @@ |
|||
/** |
|||
* 猫类,仅继承动物抽象类,不实现游泳接口 |
|||
*/ |
|||
public class Cat extends Animal { |
|||
@Override |
|||
public void makeSound() { |
|||
System.out.println("猫叫:喵喵喵!"); |
|||
} |
|||
} |
|||
@ -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("狗在游泳:狗刨式前进!"); |
|||
} |
|||
} |
|||
@ -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 # 主测试类 |
|||
|
|||
@ -0,0 +1,9 @@ |
|||
/** |
|||
* 游泳能力接口,定义会游泳的动物的行为 |
|||
*/ |
|||
public interface Swimmable { |
|||
/** |
|||
* 游泳方法 |
|||
*/ |
|||
void swim(); |
|||
} |
|||
@ -0,0 +1,16 @@ |
|||
# AI协助记录 |
|||
一、开发过程中遇到的问题 |
|||
1. 多态调用接口方法的问题 |
|||
问题:使用`Animal`父类引用指向`Dog`对象时,无法直接调用`swim()`方法,编译报错。 |
|||
解决:通过`instanceof`关键字判断对象是否实现了`Swimmable`接口,再进行强制类型转换后调用。 |
|||
2. 抽象类与接口的使用混淆 |
|||
问题:不清楚何时用抽象类、何时用接口,导致初始设计逻辑混乱。 |
|||
解决:明确抽象类用于**继承通用属性/行为**(动物的叫声是所有动物的通用行为),接口用于**扩展额外能力**(游泳是部分动物的能力),因此`Animal`用抽象类,`Swimmable`用接口。 |
|||
3. 方法重写的规范问题 |
|||
问题:子类重写抽象方法时,忘记加`@Override`注解,代码可读性差。 |
|||
解决:在所有重写方法上添加`@Override`注解,规范代码,同时让编译器检查重写是否正确。 |
|||
|
|||
二、优化调整 |
|||
1. 增加`instanceof`判断,避免类型转换异常 |
|||
2. 为所有类和方法添加JavaDoc注释,提升代码可读性 |
|||
3. 补充多场景测试(父类引用+直接对象调用),完整验证多态特性 |
|||
|
After Width: | Height: | Size: 72 KiB |
Loading…
Reference in new issue