自己做个菜? 面向对象的核心: 多态(动态绑定)

  写程序的道理就和做其他任何事是一样的, 比如炒个菜, 或者用洛阳铲来考古探方. 下面用其中任何一种事情来进行多态性的实现方法吧:
        炒菜(实现多态):
        1. 原料: 父类一个, 子类一个或多个
                     父类里面准备虚函数一个或多个.
                     子类里面准备相应的虚函数的实现一个或多个.
                    
                     父类的指针一个.
                     子类对象一个或多个.
                      
        2. 烹调过程:
                      a. 先创建一个父类: class Person, 里面声明虚函数: virtual void study();
                            创建一个子类: class Student, 里面声明函数:  void study(); 
                            创建一个子类: class Teacher, 声明函数: void study();
                            实现函数:
                                            Student::void study() { cout << " 学生们听老师讲课来学习c++ " << endl; };
                                            Teacher::void study(){ cout << " 老师们翻阅学习资料学习c++  " << endl; };
                      
                       b. main()函数中:
                             首先, 创建一个父类的指针:
                                    Person *person;
                              其次, 创建子类的对象:
                                    Student stu = new Student;
                                    Teacher teac = new Teacher;
                              实现多态: 用父类指针指向各个子类, 然后通过这一个指针, 执行相同名字的不同实现:
                                    person = &stu;
                                    person->study();            //     学生们听老师讲课来学习c++

person = &teac;
                                    person->study();            //    老师们翻阅学习资料学习c++
                                    
                             
        我现在是前敌总指挥员, 现命令各纵队司令发起最后总攻, 我虽然只发布了同一个命令, 就是进攻, 但是各个纵队和军团进行攻击的方式将各不相同, 这就是面向对象编程思想中的多态.

时间: 2024-12-16 16:27:35

自己做个菜? 面向对象的核心: 多态(动态绑定)的相关文章

(转)面向对象最核心的机制——动态绑定(多态)

一.面向对象最核心的机制——动态绑定,也叫多态 1.1.通过下面的例子理解动态绑定,即多态 1 package javastudy.summary; 2 3 class Animal { 4 /** 5 * 声明一个私有的成员变量name. 6 */ 7 private String name; 8 9 /** 10 * 在Animal类自定义的构造方法 11 * @param name 12 */ 13 Animal(String name) { 14 this.name = name; 15

C#面向对象的核心概念

一.面向对象的核心概念 (一)抽象--面向对象的根基 讲到抽象,不得不涉及到现代科学技术的基础--数学. 数学是一门抽象的科学,面对着纷繁复杂的世间万物,数学不理会各种事物的独特特性,而只抽取它们在数量上的特性,深刻揭示了"世间万物"在数量上表现出的共同规律,抽象正是数学的本质特征. 数学的一个分支--离散数学是计算机科学的根基之一,因此,计算机科学从诞生之日起,就与数学有着密不可分的联系,抽象思维也是计算机科学的主要思维方法之一. 在使用面向对象的方法设计一个软件系统时,首先就要区分

面向对象的核心概念

1.面向对象的核心概念 从理论上说,面向对象技术拥有四大基本特性. (1)封装 这是一种隐藏信息的特征.封装这一特性不仅大大提高了代码的易用性,而且还使得类的开发者可以方便的更换新的算法,这种变化不会影响使用类的外部代码.可以用以下公式展示类的封装特性: 封装的类=数据+对此数据所进行的操作(即算法) 通俗的说,封装就是:包起外界不必需要知道的东西,只向外界展露可供展示的东西. 在面向对象理论中,封装这个概念拥有更为宽广的含义.小到一个简单的数据结构,大到一个完整的软件子系统,静态的如某软件系统

面向对象的核心思想

个人觉得面向对象的核心思想的重点,是当我们面向一个对象(事或物)时,应该思考该对象的数据构成方式以及该对象与其他对象之间的互动模式. 面向对象其实是一个对问题对象的数据构成方式的新思想,由最原始的数据类型(整形.字符串.浮点型等) → 数组(线性) → 多维数组 → 集合(C#中的ArrayList) → 哈希表 → 类及实例化(类的属性.索引器) → 类的继承,体现了面向对象的数据构成的复合性.对于那些对象的多态.反射.重用等功能,我觉得这些都是为类及实例化能完成更复杂的对象与场景之间的关系进

面向对象的核心基础

================ 面向对象的核心基础 ====================注意: 标识符    1.定义必须有意义    2.以字母,下划线,$符号开头,其他内容不能包含特征符号    3.类名首字母必须大写,方法名和属性名首字母必须小写,使用驼峰命名方式    4.常量所有字符都必须大写,如果多个单词之间使用下划线分割 一.什么是对象       现实:具有明确定义的行为和特征的一类事物       程序: 堆内存中分配内容空间       具体类的实例.二.什么类 类:

面向对象的JavaScript --- 多态

面向对象的JavaScript --- 多态 多态 "多态"一词源于希腊文 polymorphism,拆开来看是poly(复数)+ morph(形态)+ism,从字面上我们可以理解为复数形态. 多态的实际含义是:同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果.换句话说,给不同的对象发送同一个消息的时候,这些对象会根据这个消息分别给出不同的反馈.从字面上来理解多态不太容易,下面我们来举例说明一下. ? 主人家里养了两只动物,分别是一只鸭和一只鸡,当主人向它们发出&quo

php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念2.什么是对象?从类中拿到的具有具体属性值得个体,称为对象,对象是一个具体的个体 所以,面向对象即我们专注对象来处理问题,通过从一个个具有属性和功能的类中拿到对象来处理问题. 下面我们再来细说下面向对象的三大特征:继承/封装/多态 一.继承 在PHP中我们主要通关E

[JavaScript] JavaScript 面向对象设计 (3) : 多态与界面篇

在前一篇中我们介绍了基础的 JavaScript 继承实践法,透过 Object.prototype 我们可以自由决定对象要继承自哪个对象,也可以扩充对象目前现有的属性和方法 (和 C# 的 Extension Method 有异曲同工之妙),在本篇中,我们要来介绍面向对象的另一个特性:多态 (Polymorphism). 在前一篇中我们介绍了基础的 JavaScript 继承实践法,透过 Object.prototype 我们可以自由决定对象要继承自哪个对象,也可以扩充对象目前现有的属性和方法

Java面向对象㈡ -- 继承与多态

Java的继承是通过extends和implement来实现的,Java不支持多继承,但是Java支持多层继承以及多实现(接口).Java继承有一个关键字super是用来指向父类.Java继承衍生出覆盖的概念.覆盖被用来支持多态.实际开发中Java通常继承于抽象类,实现于接口.如果不希望一个类被继承,或者一个方法被覆盖,或者一个成员变量被改变,就可以用final修饰.这里只说明两个问题:1,重载和覆盖的区别重载和覆盖的区别:重载发生在同一个类之中,重载要求函数名相同,参数不同(参数个数||参数类