然后实例化此宠物类2次,得到两个宠物类对象的变量,并分别调用显示宠物的基本信息的成员方法,以及分别调用发出叫声的成员方法。
时间: 2024-02-21 09:56:37 浏览: 65
好的,我来为您提供代码:
```python
class Pet:
def __init__(self, name, age, color):
self.name = name
self.age = age
self.color = color
def show_info(self):
print("宠物名字:{},年龄:{}岁,颜色:{}".format(self.name, self.age, self.color))
def make_sound(self):
print("{}在叫".format(self.name))
# 实例化两次
pet1 = Pet("小花", 2, "白色")
pet2 = Pet("小黑", 1, "黑色")
# 调用第一个对象的方法
pet1.show_info() # 宠物名字:小花,年龄:2岁,颜色:白色
pet1.make_sound() # 小花在叫
# 调用第二个对象的方法
pet2.show_info() # 宠物名字:小黑,年龄:1岁,颜色:黑色
pet2.make_sound() # 小黑在叫
```
这里我们先定义了 `Pet` 类,然后进行了两次实例化操作,得到了两个宠物对象 `pet1` 和 `pet2`。接着,我们分别调用了它们的方法来显示宠物的基本信息和发出叫声。
相关问题
(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。深⼊理解引⼊转型和多态
好的,以下是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()方法,从而实现了多态和引用转型的效果。
编写一个Animal类,并定义一些成员变量和成员方法,然后再编写一个继承Animal的子类,要求子类对父类中的成员方法进行重写,在测试类中使用所定义的类,说明其效果
当然可以。首先,我们创建一个名为`Animal`的抽象基础类,它包含一些通用的行为和属性:
```java
public abstract class Animal {
private String name;
protected int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
// 父类的抽象方法,所有动物都会叫
public abstract void makeSound();
// 访问器方法
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
```
然后,我们可以定义一个具体的子类`Dog`,继承自`Animal`并重写了`makeSound()`方法:
```java
public class Dog extends Animal {
public Dog(String name, int age) {
super(name, age);
}
@Override
public void makeSound() {
System.out.println("汪汪汪,我是" + getName());
}
}
```
现在,我们编写一个测试类`Test`来实例化`Animal`和`Dog`,并演示多态的效果:
```java
public class Test {
public static void main(String[] args) {
Animal myPet = new Dog("小黄", 5); // 创建狗对象,通过父类型的引用
myPet.makeSound(); // 调用的是Dog的makeSound方法
Animal anotherPet = new Dog("小白", 7);
anotherPet.makeSound(); // 也调用的是Dog的makeSound方法
System.out.println(anotherPet.getName()); // 输出另一个宠物的名字
}
}
```
当运行`Test`类,你会看到这样的输出:
```
汪汪汪,我是小黄
汪汪汪,我是小白
```
这展示了多态性,即子类的对象通过父类型引用调用时,实际执行的是子类特有的方法。
阅读全文
相关推荐















