定义一个动物Animal类,再由此类派生出狗Dog类、猫Cat类。Dog、Cat类都定义了Speak()成员方法,在父类中Speak()定义为抽象方法。测试类DogCat的main()中,分别定义一个Dog类的对象、Cat类的对象,分别调用Speak(),输出狗和猫的叫声。
时间: 2024-05-05 09:17:13 浏览: 14
```
abstract class Animal {
public abstract void Speak();
}
class Dog extends Animal {
public void Speak() {
System.out.println("汪汪汪");
}
}
class Cat extends Animal {
public void Speak() {
System.out.println("喵喵喵");
}
}
public class DogCat {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
dog.Speak();
cat.Speak();
}
}
```
相关问题
3、定义一个动物Animal类,再由此类派生出狗Dog类、猫Cat类。Dog、Cat类都定义了Speak()成员方法,在父类中Speak()定义为抽象方法。测试类DogCat的main()中,分别定义一个Dog类的对象、Cat类的对象,分别调用Speak(),输出狗和猫的叫声。
代码如下:
```java
abstract class Animal {
public abstract void Speak();
}
class Dog extends Animal {
public void Speak() {
System.out.println("汪汪汪");
}
}
class Cat extends Animal {
public void Speak() {
System.out.println("喵喵喵");
}
}
public class DogCat {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
dog.Speak();
cat.Speak();
}
}
```
输出结果为:
```
汪汪汪
喵喵喵
```
声明一个Animal类,派生出Dog类和Cat类,三个类中都定义Speak函数,其中基类中的Speak函数为虚函数。写出主函数并实现运行时的多态。
下面是Animal类、Dog类和Cat类的定义以及主函数的实现:
```cpp
#include <iostream>
using namespace std;
class Animal {
public:
virtual void Speak() {
cout << "Animal speaks" << endl;
}
};
class Dog : public Animal {
public:
void Speak() {
cout << "Dog barks" << endl;
}
};
class Cat : public Animal {
public:
void Speak() {
cout << "Cat meows" << endl;
}
};
int main() {
Animal* animalPtr;
Dog dog;
Cat cat;
animalPtr = &dog;
animalPtr->Speak();
animalPtr = &cat;
animalPtr->Speak();
return 0;
}
```
在这个例子中,Animal类是一个基类,Dog类和Cat类都是从它派生出来的。基类中的Speak函数被声明为虚函数,这意味着派生类可以覆盖它。在派生类中,我们分别定义了Dog的Speak函数和Cat的Speak函数。
在主函数中,我们首先定义了一个Animal指针animalPtr,然后将它指向一个Dog对象,调用animalPtr的Speak函数,输出"Dog barks"。接着我们把指针animalPtr指向一个Cat对象,再次调用animalPtr的Speak函数,输出"Cat meows"。
这个例子展示了运行时多态的实现。在编译时,编译器无法确定animalPtr指向哪个对象,因此需要在运行时动态地确定调用哪个Speak函数。这正是虚函数的作用。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)