多态例子——Java和C++实现
来源:互联网 发布:张剑150篇怎么样 知乎 编辑:程序博客网 时间:2024/06/05 12:45
Java用关键字abstract修饰类名来定义一个抽象类,而C++只要在类中定义一个或多个纯虚函数(虚函数后加“ = 0”)就可使该类成为抽象类。
Java实现例子:
abstract class Pet{//抽象类protected String name;public abstract void enjoy();//抽象方法public String getName(){return name;}public void setName(final String name){this.name = name;}}class Dog extends Pet{private int furColor;public Dog(final String name, final int furColor){this.name = name;this.furColor = furColor;}public void enjoy(){//重写父类enjoy方法System.out.println("Wang!Wang!");}}class Cat extends Pet{private int eyeColor;public Cat(final String name, final int eyeColor){this.name = name;this.eyeColor = eyeColor;}public void enjoy(){//重写父类enjoy方法System.out.println("Miao~Miao~");}}class Lady{private String name;private Pet pet;public Lady(final String name, final Pet pet){this.name = name;this.pet = pet;}public void play(){pet.enjoy();//运行时动态绑定}public String getPetName(){return pet.getName();//编译时静态绑定}public void setPetName(final String name){ pet.setName(name);//编译时静态绑定}public void display(){System.out.print(name + " " + pet.getName() + " ");}}public class TestPoly{public static void main(String[] agrs){Lady lady1 = new Lady("MiFei" ,new Dog("XiaoWang", 1));Lady lady2 = new Lady("FangFang" ,new Cat("XiaoMi", 2));lady1.display();lady1.play();lady2.display();lady2.play();lady1.setPetName("WangCai");lady2.setPetName("DouLaAMeng");lady1.display();lady2.display();}}
C++实现:
#include <iostream>#include <string>using namespace std;class Pet{//抽象基类public:virtual void enjoy() const = 0;//纯虚函数string getName() const{return name;}void SetName(const string &name){this->name = name;}protected:string name;};class Dog: public Pet{public:Dog(const string &name, const int furColor){this->name = name;this->furColor = furColor;}void enjoy() const{//重写父类虚函数enjoycout << "Wang!Wang!" << endl;}private:int furColor;};class Cat: public Pet{public:Cat(const string &name, const int eyeColor){this->name = name;this->eyeColor = eyeColor;}void enjoy() const{//重写父类虚函数enjoycout << "Miao~Miao~" << endl;}private:int eyeColor;};class Lady{public:Lady(const string &name, Pet *const pet){this->name = name;this->pet = pet;}void play() const{pet->enjoy();//运行时动态绑定}string getPetName() const{return pet->getName();//编译时静态绑定}void setPetName(const string &name){pet->SetName(name);//编译时静态绑定}void display() const{cout << name << " " << pet->getName() << " ";}private:string name;Pet *pet;};int main(void){Lady *lady1 = new Lady("MiFei", new Dog("XiaoWang", 1));Lady *lady2 = new Lady("FangFang", new Cat("XiaoMi", 2));lady1->display();lady1->play();lady2->display();lady2->play();lady1->setPetName("WangCai");lady2->setPetName("DouLaAMeng");lady1->display();lady2->display();cout << endl;delete lady1, lady2;lady1 = lady2 = 0;return 0;}
- 多态例子——Java和C++实现
- Java实现多态例子
- Linux C变成小例子——实现ls命令
- 白话例子群算法—C语言实现
- 优先队列--C语言实现与Java例子
- Java多态例子
- c sharp -- 多态例子
- 一个例子说明C语言和Java的区别
- java反射实现例子
- 学习随笔——Java类和对象小例子
- java— 抽象类、接口、final、的理解和例子
- C语言也可以“面向对象”—— C语言实现封装、继承和多态
- 用Java和Jquery实现了一个砸金蛋例子
- Linux C编程的一个小例子——实现一个简单的who命令(第一版)
- Linux C编程的小例子——实现who命令(第二版)
- Linux C编程小例子——pwd命令的实现
- C++——一个简单的多文件具体例子
- java 多态经典例子
- C++中的宏替换
- 软工第二次作业 MP3播放器(1)
- 求值时的未定义行为
- 1016 hdu
- Ubuntu12.04中 Eclipse添加快速启动项
- 多态例子——Java和C++实现
- 为SQL Server 2012配置镜像注意事项及采用SSD硬盘作为数据库存储磁盘
- Play Framework系列(2)_运行Play Framework
- Oracle手工恢复案例(非归档模式)
- Spring 的 BeanFactory 和 FctoryBean 关系
- Xpo学习一
- 结合性,优先级,声明
- Effective C++学习笔记(五)
- 交叉排序