1. 定义一个继承结构,猫和狗继承动物这个类,波斯猫和狸花猫继承猫这个类,哈士奇泰迪继承狗这个类,波斯猫方法体打印:一只叫做XXX的,X岁的波斯猫,正在吃小饼干~ 狸花猫方法体打印:一只叫做XXX的,X岁的狸花猫,正在吃鱼儿~ 泰迪方法体打印:一只叫做XXX的,X岁的泰迪,正在吃骨头,边吃边蹭~ 哈士奇方法体打印:一只叫做XXX的,X岁的哈士奇,正在吃骨头,边吃边拆家~ 测试类中定义一个方法用于饲养动物 public static void keepPet(ArrayList<???> list) { // 遍历集合,调用动物的eat方法 } 要求: a、该方法能养所有品种的猫,但是不能养狗 b、该方法能养所有品种的狗,但是不能养猫 c、该方法能养所有的动物,但是不能传递其他类型
时间: 2023-06-06 20:08:12 浏览: 73
的对象
回答:
定义代码:
class Animal {
}
class Cat extends Animal {
}
class PersianCat extends Cat {
public void eat() {
System.out.println("一只叫做XXX的,X岁的波斯猫,正在吃小饼干~");
}
}
class TabbyCat extends Cat {
public void eat() {
System.out.println("一只叫做XXX的,X岁的狸花猫,正在吃鱼儿~");
}
}
class Dog extends Animal {
}
class Husky extends Dog {
public void eat() {
System.out.println("一只叫做XXX的,X岁的哈士奇,正在吃骨头,边吃边拆家~");
}
}
class Teddy extends Dog {
public void eat() {
System.out.println("一只叫做XXX的,X岁的泰迪,正在吃骨头,边吃边蹭~");
}
}
测试方法代码:
public static void keepPet(ArrayList<? extends Animal> list) {
for (Animal animal : list) {
animal.eat();
}
}
解释:
我们先定义了一个 Animal 类和 Cat、Dog 两个子类,然后在 Cat 和 Dog 中分别定义了两个子类 PersianCat、TabbyCat 和 Husky、Teddy。
在 PersianCat、TabbyCat 和 Husky、Teddy 中分别定义了一个方法 eat,它们分别对应着不同的行为。注意在方法体中 "\XXX\" 和 "\X\" 都是占位符,实际应该替换成对应的猫或狗的名字和年龄。
然后我们在测试方法中定义了一个泛型参数为 Animal 及其子类的 ArrayList,然后使用 for 遍历集合中的动物,并调用它们的 eat 方法。
最后通过泛型的上限通配符 <? extends Animal> 来限制了传入该方法的集合中的元素类型,保证只能传递 Animal 及其子类。