(1)定义⼀个宠物类(Pet),它有两个⽅法:叫cry(),吃东西eat(),定义宠物的⼦类狗(Dog),猫(Cat),覆盖⽗类的cry(),eat()⽅法,⾥⾯写 System.out.println("猫吃了鱼")这样的打印语句,另外狗有⾃⼰的⽅法看门guardEntrance(),猫⾃⼰独有的⽅法捉⽼⿏huntMice() 定义⼀个Test类,在main中定义两个Pet变量,pet1,pet2,采⽤引⽤转型实例化Dog,Cat,分别调⽤Pet的cry(),eat(); (2)将Pet引强制转换为具体的Dog,Cat,在调Dog的guardEntrance(),Cat的huntMice()(提⽰:先⽤instanceof进⾏类型判断) Pet p = new Dog() p.guradEntrance() (3)(思考)编写PetPark类,添加喂养宠物feedPet(Pet pet)的⽅法,在feedPet中调cry(),eat()⽅法,实例化PetPark类,再测试类中实例化狗 Dog dog = new Dog(), 猫 Pet cat = new Cat(),PetPark分别调feedPet()⽅法分别传参数cat,dog。深⼊理解引⼊转型和多态
时间: 2023-11-28 22:03:44 浏览: 178
好的,以下是Java代码实现:
```
// 宠物类
class Pet {
public void cry() {
System.out.println("宠物在叫!");
}
public void eat() {
System.out.println("宠物在吃东西!");
}
}
// 狗类
class Dog extends Pet {
@Override
public void cry() {
System.out.println("汪汪汪!");
}
@Override
public void eat() {
System.out.println("狗在吃骨头!");
}
public void guardEntrance() {
System.out.println("狗在看门!");
}
}
// 猫类
class Cat extends Pet {
@Override
public void cry() {
System.out.println("喵喵喵!");
}
@Override
public void eat() {
System.out.println("猫在吃鱼!");
}
public void huntMice() {
System.out.println("猫在捉老鼠!");
}
}
// 测试类
class Test {
public static void main(String[] args) {
Pet pet1 = new Dog();
Pet pet2 = new Cat();
pet1.cry(); // 汪汪汪!
pet1.eat(); // 狗在吃骨头!
pet2.cry(); // 喵喵喵!
pet2.eat(); // 猫在吃鱼!
if (pet1 instanceof Dog) {
Dog dog = (Dog) pet1;
dog.guardEntrance(); // 狗在看门!
}
if (pet2 instanceof Cat) {
Cat cat = (Cat) pet2;
cat.huntMice(); // 猫在捉老鼠!
}
}
}
// 宠物公园类
class PetPark {
public void feedPet(Pet pet) {
pet.cry();
pet.eat();
}
}
// 测试 PetPark 类
class TestPetPark {
public static void main(String[] args) {
Pet dog = new Dog();
Pet cat = new Cat();
PetPark petPark = new PetPark();
petPark.feedPet(dog); // 汪汪汪! 狗在吃骨头!
petPark.feedPet(cat); // 喵喵喵! 猫在吃鱼!
}
}
```
以上代码中,Pet是一个宠物类,有cry()和eat()两个方法。Dog和Cat类是Pet类的子类,分别继承了父类的cry()和eat()方法,并且覆盖了这两个方法。在覆盖后的方法中,打印出了狗叫的声音和狗吃骨头的行为、猫叫的声音和猫吃鱼的行为。Dog类还有一个独有的guardEntrance()方法,Cat类还有一个独有的huntMice()方法。
在测试类Test中,我们分别用Pet类型的变量pet1和pet2引用Dog类和Cat类的实例,然后通过这两个变量分别调用Pet类的cry()和eat()方法,实现了多态的效果。此外,我们还使用了引用转型,将Pet类型的变量转换为Dog类型的变量或者Cat类型的变量,并分别调用了这两个子类独有的方法。
在PetPark类中,我们定义了feedPet()方法,该方法的参数是Pet类型的变量pet。在方法内部,我们调用了pet的cry()和eat()方法,实现了多态的效果。在测试类TestPetPark中,我们分别实例化了Dog和Cat的对象,并将它们作为参数传递给PetPark的feedPet()方法,从而实现了多态和引用转型的效果。
阅读全文