diff --git a/w6/Animal.java b/w6/Animal.java new file mode 100644 index 0000000..f6d0aa5 --- /dev/null +++ b/w6/Animal.java @@ -0,0 +1,19 @@ +package com.rental.animal; + +public abstract class Animal { + private String name; + + public Animal(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public abstract void makeSound(); +} \ No newline at end of file diff --git a/w6/AnimalTest.java b/w6/AnimalTest.java new file mode 100644 index 0000000..d2d4efe --- /dev/null +++ b/w6/AnimalTest.java @@ -0,0 +1,36 @@ +package com.rental.animal; + +public class AnimalTest { + public static void main(String[] args) { + System.out.println("===== 多态测试 =====\n"); + + Animal dog = new Dog("旺财"); + Animal cat = new Cat("小白"); + + System.out.println("测试 makeSound 方法(多态调用):"); + dog.makeSound(); + cat.makeSound(); + + System.out.println("\n===== 测试游泳能力 =====\n"); + + if (dog instanceof Swimmable) { + ((Swimmable) dog).swim(); + } + + if (cat instanceof Swimmable) { + ((Swimmable) cat).swim(); + } else { + System.out.println(cat.getName() + "不会游泳"); + } + + System.out.println("\n===== 动物数组测试 =====\n"); + + Animal[] animals = {new Dog("大黄"), new Cat("小花"), new Dog("黑子")}; + for (Animal animal : animals) { + animal.makeSound(); + if (animal instanceof Swimmable) { + ((Swimmable) animal).swim(); + } + } + } +} \ No newline at end of file diff --git a/w6/Cat.java b/w6/Cat.java new file mode 100644 index 0000000..5dbf31d --- /dev/null +++ b/w6/Cat.java @@ -0,0 +1,13 @@ +package com.rental.animal; + +public class Cat extends Animal { + + public Cat(String name) { + super(name); + } + + @Override + public void makeSound() { + System.out.println(getName() + "喵喵叫"); + } +} \ No newline at end of file diff --git a/w6/Dog.java b/w6/Dog.java new file mode 100644 index 0000000..fc59af4 --- /dev/null +++ b/w6/Dog.java @@ -0,0 +1,18 @@ +package com.rental.animal; + +public class Dog extends Animal implements Swimmable { + + public Dog(String name) { + super(name); + } + + @Override + public void makeSound() { + System.out.println(getName() + "汪汪叫"); + } + + @Override + public void swim() { + System.out.println(getName() + "在游泳"); + } +} \ No newline at end of file diff --git a/w6/Swimmable.java b/w6/Swimmable.java new file mode 100644 index 0000000..6e3089c --- /dev/null +++ b/w6/Swimmable.java @@ -0,0 +1,5 @@ +package com.rental.animal; + +public interface Swimmable { + void swim(); +} \ No newline at end of file