1. 定义一个继承结构: 属性:名字、年龄行为:吃东西 波斯猫方法体打印:一只叫做XXX的,X岁的波斯猫,正在吃小饼干~狸花猫方法体打印:一只叫做XXX的,X岁的狸花猫,正在吃鱼儿~泰迪方法体打印:一只叫做XXX的,X岁的泰迪,正在吃骨头,边吃边蹭~哈士奇方法体打印:一只叫做XXX的,X岁的哈士奇,正在吃骨头,边吃边拆家~测试类中定义一个方法用于饲养动物public static void keepPet(ArrayList<???> list) { // 遍历集合,调用动物的eat方法}要求:a、该方法能养所有品种的猫,但是不能养狗b、该方法能养所有品种的狗,但是不能养猫c、该方法能养所有的动物,但是不能传递其他类型
时间: 2024-02-13 09:00:12 浏览: 75
根据题目要求,可以定义如下的类继承结构:
```java
// 父类 Animal
public class Animal {
protected String name;
protected int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public void eat() {
System.out.println("一只叫做" + name + "的," + age + "岁的动物,正在吃东西~");
}
}
// 子类 PersianCat
public class PersianCat extends Animal {
public PersianCat(String name, int age) {
super(name, age);
}
public void eat() {
System.out.println("一只叫做" + name + "的," + age + "岁的波斯猫,正在吃小饼干~");
}
}
// 子类 TabbyCat
public class TabbyCat extends Animal {
public TabbyCat(String name, int age) {
super(name, age);
}
public void eat() {
System.out.println("一只叫做" + name + "的," + age + "岁的狸花猫,正在吃鱼儿~");
}
}
// 子类 TeddyDog
public class TeddyDog extends Animal {
public TeddyDog(String name, int age) {
super(name, age);
}
public void eat() {
System.out.println("一只叫做" + name + "的," + age + "岁的泰迪,正在吃骨头,边吃边蹭~");
}
}
// 子类 HuskyDog
public class HuskyDog extends Animal {
public HuskyDog(String name, int age) {
super(name, age);
}
public void eat() {
System.out.println("一只叫做" + name + "的," + age + "岁的哈士奇,正在吃骨头,边吃边拆家~");
}
}
```
然后在测试类中定义一个方法用于饲养动物:
```java
import java.util.ArrayList;
public class Test {
public static void keepPet(ArrayList<? extends Animal> list) {
// 遍历集合,调用动物的eat方法
for (Animal animal : list) {
animal.eat();
}
}
public static void main(String[] args) {
ArrayList<PersianCat> catList = new ArrayList<>();
catList.add(new PersianCat("小白", 2));
catList.add(new PersianCat("小黑", 1));
keepPet(catList);
ArrayList<TeddyDog> dogList = new ArrayList<>();
dogList.add(new TeddyDog("旺财", 3));
dogList.add(new TeddyDog("小强", 2));
keepPet(dogList);
ArrayList<Animal> animalList = new ArrayList<>();
animalList.add(new PersianCat("小花", 1));
animalList.add(new HuskyDog("大黄", 4));
keepPet(animalList);
}
}
```
代码解释:
- 首先定义Animal类作为父类,包含名字和年龄属性,以及eat方法。
- PersianCat、TabbyCat、TeddyDog、HuskyDog类分别继承Animal类,并重写eat方法。
- 在测试类中定义了一个keepPet方法,参数类型使用了通配符<? extends Animal>,表示可以传递Animal类及其子类的集合,但不能传递其他类型的集合。
- 在main方法中,分别创建了波斯猫、泰迪狗和动物的集合,并分别调用了keepPet方法,传递对应的集合作为参数。可以看到,keepPet方法能够养所有品种的猫和狗,以及所有的动物,但不能传递其他类型的集合。
阅读全文