多态

Interview_C++_day2

青春壹個敷衍的年華 提交于 2020-02-08 19:43:23
函数指针 在编译过程中,每一个函数都有一个入口地址,而函数指针就是指向该入口地址的指针。 #include<iostream> using namespace std; void fun1(int x) { cout << x << endl; } void fun2(int x) { cout << x+x <<endl; } int main() { void (*pf)(int); pf = fun1; pf(222); pf = fun2; pf(222); } 多态性和虚函数(virtual) 静态多态主要表现为重载,在编译时就确定了。 动态多态的基础是虚函数机制,在运行期间动态绑定,决定了基类调用哪个函数。 #include<iostream> using namespace std; class Shape { public: void show() { // 未定义为虚函数 cout << "Shape::show()" << endl; } void virtual show() { // 定义为虚函数 cout << "Shape::show()" << endl; } }; class Line : public Shape { public: void show() { cout << "Line::show()" << endl; } }; class

JAVA之Polymorphic(多态)

↘锁芯ラ 提交于 2020-02-08 14:58:10
1.多态的几个必要条件 1.有继承关系 2.有方法的重写 3.父类引用指向子类对象 2.多态中类成员的变现情况 父类: class Father { public int num = 10 ; public String print ( ) { return "Father的print()方法!" ; } public static String staticprint ( ) { return "Father的staticprint()方法" ; } } 子类: class Son extends Father { public int num = 20 ; public String print ( ) { return "Son的print()方法" ; } public static String statocprint ( ) { return "Son的staticprint()方法" ; } } 测试类: public class Main { public static void main ( String [ ] args ) { Father f = new Son ( ) ; //父类引用指向子类对象 System . out . println ( "f的num值是:" + f . num ) ; System . out . println (

多态

北慕城南 提交于 2020-02-08 04:39:21
多态 1. 什么是多态 2. 举例 1. 什么是多态 多态(以封装和继承为前提) 不同的子类对象调用相同的方法,产生不同的执行结果 2. 举例 class Dog ( object ) : def __init__ ( self , name ) : self . name = name def game ( self ) : print ( '%s 开心的玩耍~' % ( self . name ) ) class Gaifei ( Dog ) : # 父类的方法不能满足子类的需求 重写game方法 def game ( self ) : print ( '%s和米老鼠一起玩~' % ( self . name ) ) class Person ( object ) : def __init__ ( self , name ) : self . name = name def game_with_dog ( self , dog ) : print ( '%s和%s玩~' % ( self . name , dog . name ) ) dog . game ( ) 情况一: # 创建一个狗对象 wangcai = Dog ( '大黄' ) # 创建一个人对象 xiaoming = Person ( '小明' ) # 让小明和狗玩 xiaoming . game_with_dog

复习打卡--0816多态和属性访问

不羁岁月 提交于 2020-02-08 02:32:12
面向对象三大特征: 封装:将数据和方法放在一个类中,构成封装 继承:子类继承父类属性和方法,可多继承 多态: 一个事物有多种形态,一个抽象类有多个子类,不同的子类对象调用相同的方法,产生不同的执行结果。多态可以增加代码的灵活度。是基于类的继承。 class Animal: def run(self): raise AttributeError('子类必须实现这个方法') class Pig(Animal): def run(self): print('pig is walking') class Dog(Animal): def run(self): print('dog is running') def func(obj): # python的函数参数 无任何类型限制,可以是类本身,也可以是类的对象 obj.run() pig1=Pig() d1=Dog() func(pig1) func(d1) 多态的意义: 开放封闭原则   对于一个变量,我们只需要知道它的Base类型,无需知道它的子类型,就可以放心的调用相同的方法quack();   当需要新增功能时,只需新增一个Base的子类实现quack()方法,就可以在原基础上扩展功能,即开放封闭原则:      对扩展开放:允许新增一个Base的子类;      对修改封闭:不要修改Base依赖类型的quack()函数; 鸭子类型

Java面向对象大致梳理

你。 提交于 2020-02-07 21:19:19
面向对象思想、 面向对象思想概述: Java设计语言面向对象: Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下, 使用Java语言去设计、开发计算机程序。 这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面 向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算 机事件的设计思想。 它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去 操作实现。 类和对象: 类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该 类事物 属性:就是该事物的状态信息。 行为:就是该事物能够做什么。 对象:是一类事物的具体体现。对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的属性 和行为。 类与对象的关系 : 类是对一类事物的描述,是抽象的。 对象是一类事物的实例,是具体的。 类是对象的模板,对象是类的实体。 面向对象之封装: 概述: 面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。 封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的 方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。

面向对象

梦想与她 提交于 2020-02-07 09:37:26
什么是面向对象:   是一种分析问题的方式,为了增强程序的可扩展性。(是一种思想) 面向对象的特性是什么:   1.封装:   原则:对外开放,对内封闭,对外扩展开放,对内修改封闭,提供一个接口供外部访问。   类和对象本身就是封装的体现;   属性封装了字段;   方法封装了一堆代码;   类封装了方法;   程序集封装了类;   是指把事物的状态和行为封装在类中,使用这个类的人完全不需要知道类的内部是怎么实现的,只需要调用类中的属性或方法,来实现功能。   2.继承:   是类与类的关系,是指某个类中要使用另外一个类中的一些属性或方法时,这个类只需继承那个类,这个类就可以使用那个类中所有的属性和方法了,这个类就称为子类,而被继承的那个类称为父类,继承实现代码复用,继承主要是为了体现多态;   能不能继承私有成员:(存在歧义)     1>子类继承父类,创建子类对象时,私有成员也被分配了内存空间;     2>继承只是面向对象的概念,继承的目的是为了子类使用,实现代码重用,体现多态;     3>即便是继承了但不能访问,所以没有意义;      简单的理解:     1>子类继承父类;     2>拥有父类的属性和方法(构造函数是不能继承的,只能在子类中调用父类中的构造函数);     3>实现代码复用,提高效率;     4>体现多态;   3.多态:    

静态联编和动态联编

北战南征 提交于 2020-02-07 06:48:38
转载自: http://blog.csdn.net/blucexi/article/details/1253265 联编 就是将模块或者函数合并在一起生成可执行代码的处理过程,同时对每个模块或者函数调用分配内存地址,并且对外部访问也分配正确的内存地址,它是计算机程序彼此关联的过程。按照联编所进行的阶段不同,可分为两种不同的联编方法: 静态联编 和 动态联编 。 静态联编 是指在编译阶段就将函数实现和函数调用关联起来,因此静态联编也叫早绑定,在编译阶段就必须了解所有的函数或模块执行所需要检测的信息,它对函数的选择是基于指向对象的指针(或者引用)的类型,C语言中,所有的联编都是静态联编,据我所知道的,任何一种编译器都支持静态联编(废话)。 动态联编 是指在程序执行的时候才将函数实现和函数调用关联,因此也叫运行时绑定或者晚绑定,动态联编对函数的选择不是基于指针或者引用,而是基于对象类型,不同的对象类型将做出不同的编译结果。C++中一般情况下联编也是静态联编,但是一旦涉及到多态和虚拟函数就必须要使用动态联编了。下面将介绍一下多态。 多态 :字面的含义是具有多种形式或形态。C++多态有两种形式,动态多态和静态多态;动态多态是指一般的多态,是通过类继承和虚函数机制实现的多态;静态多态是通过模板来实现,因为这种多态实在编译时而非运行时,所以称为静态多态。 动态多态例子: #include

Java入门part5--类和对象

▼魔方 西西 提交于 2020-02-07 05:13:33
类和对象 oop语言的三大特征?(OOP 面向对象的程序设计语言 Object-oriented-program) 继承 封装 多态 什么是类?什么是对象? 类是一类对象的统称,对象是类的具体化的实例。在现实世界中类就相当于设计图纸,而对象就是根据图纸建造出来的房子。 面向对象 关注对象 即参与过程所涉及到的主体 处理大问题 面向过程 关注过程 即整个过程中涉及的行为 处理小问题 类和类的实例化 A . 如何产生一个类 //产生类的语法 class 类名{ field;//成员字段 即类中的元素 method;//成员方法 } 比如 class Person{ //属性 成员变量 实例成员变量 存放在对象内 public String name; public int age; //static修饰的 静态成员变量(也叫类变量)编译时已产生 属于类本身且只有一份 放在方法区 public static int count = 10; //被static和final同时修饰 静态常量 属于类本身 只有一份 后续不可更改 放在方法区 public static final int SIZE = 20; //实例成员常量 被final修饰 也属于对象 放在哪个区不一定 public final int SIZE2 = 30; //构造方法 public Person(String

Java面向对象的多态

限于喜欢 提交于 2020-02-07 04:48:46
  Java中多态的概念是面向对象中除封装和继承外非常重要的知识点,也是Java面向对象三大特性最后一个特性   多态其实就是指对象存在的多种形态,多态分为引用多态和方法多态   引用多态的含义就是:父类的引用可以指向它本类的对象,不仅如此父类的引用还可以指向子类的对象,这就是引用多态   用简单的代码来看一下引用多态的含义:   动物类:Animal 1 public class Animal { 2 public Animal(){ 3 System.out.println("Animal类的构造方法被执行"); 4 } 5 }   狗类:Dog 1 public class Dog extends Animal{ 2 public Dog(){ 3 System.out.println("Dog类的构造方法被调用"); 4 } 5 } 然后来测试一下: 1 public class Initail { 2 public static void main(String[] args){ 3 Animal animal = new Animal(); //父类的引用指向本类对象 4 Animal dog = new Dog(); //父类的引用指向了子类对象 5 Dog dog1 = new Dog(); //子类引用只能指向子类对象 6 } 7 } 由代码可以看出

JAVA面向对象的三大特性 多态

天大地大妈咪最大 提交于 2020-02-07 04:46:05
多态 指的是对象的多种形态 继承是多态的实现基础,别忘了子父类要有继承关系. 多态特性: 一、引用多态 1.父类引用可以指向本类对象 Animal obj1 = new Animal(); 2.父类引用可以指向子类对象 Animal obj2 = new Dog(); 但是我们不能用子类的引用指向父类对象 Dog obj3 = new Animal();//错 二、方法多态 创建本类对象时,调用的方法为本类方法。 创建子类对象时,调用的方法为子类重写的方法或者继承的方法。 1.在父类Animal中定义一个eat()方法,输出一个语句(动物有吃的能力); 在子类Dog中重写eat()方法,输出一个语句(狗是吃肉的); 那么我们在测试类main函数里面,如果obj1.eat() ,那么调用的是父类的方法. 若用obj2调用eat()方法,那么调用的是子类的方法. 2.还有一种情况,比如创建一个继承父类Animal的子类Cat ,但是Cat里并不重写继承的eat()方法. 然后,我们在测试类main函数里创建一个子类对象, Animal obj3 = new Cat(); 然后调用 obj3.eat(); 那么,结果调用的则是子类继承父类的方法. (输出结果:动物有吃的能力) 3.最后一种特殊情况,多态的特性是不能使用的. 若在子类添加一个独有的方法 public void