多态

python学习35:多态

不羁岁月 提交于 2020-01-29 17:56:03
多态(以封装和继承为前提); 不同的子类对象调用相同的方法 产生不同的执行结果。 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 ( '大黄' ) gou = Gaifei ( '高飞' ) # 创建一个人对象 xiaoming = Person ( '小明' ) # 让小明和狗玩 xiaoming . game_with_dog ( wangcai )

c#基础语言编程-多态

南笙酒味 提交于 2020-01-29 15:51:55
语言中的多态性是为了使程序有扩展性,为实现多态性,在程序中体现为接口、抽象类、父类、具体类。 接口就是一种规范,解决了多重继承的问题,类似一种规范,告诉我要做什么,具有什么能力,在接口中定义写行为属性。 接口的特性 接口类类似抽象类,不能实例化接口;接口中的方法都是抽象方法,继承于此接口的非抽象类必须实现接口中所有成员。 接口只能包含方法(属性、事件、索引器最终都是方法),不能有字段、常量、构造函数和析构函数、静态变量,但是可以有委托和事件。 接口中成员不许有访问修饰符,默认为public,手动添加会编译出错。 接口中成员只有定义,没有任何实现,像抽象类一样 实现接口的类,直接实现接口中的方法,不用写override。 当显示该接口的成员时,实例成员不能通过类实例访问(不提倡用类实例访问,这样就无法体现多态性),只能通过接口实例访问,显示实现默认是private。当隐示实现接口成员,两者实例都能访问,但是要将成员表示为public。 比如: public class Person : IFace1, IFace2 { public void Fly() { Console.WriteLine("实现了IFace1中的Fly方法。"); } //显示实现接口的访问修饰符默认是没有的,类中成员没有写访问修饰符这默认就是private /

面向对象三大特性

感情迁移 提交于 2020-01-29 10:09:24
面向对象三大基本特性:封装,继承,多态 封装,把客观事物封装成抽象的类,并且 类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏 。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说, 一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体 。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。 继承,指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力: 它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展 。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力。 多态,所谓多态就是指 一个类实例的 相同方法在不同情形有不同表现形式 。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着

java知识点总结

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-29 07:40:34
1.Java三大特性 三大特性 :继承 ,封装,多态。 封装 :是指属性私有化,使用者可通过get ,set等方法来访问属性,隐藏具体属性和实现细节,仅仅对外开放接口,控制车程序中属性的访问级别。 封装的目的 :增加安全性和简化编程,使用者不必在意具体实现细节,而只通过外部接口即可访问类的成员。 继承 :是指将相同的方法和成员提取出来,新建一个类 继承的目的 :代码复用 多态 :多态又分为设计时多态和运行时多态 设计时多态:即重载,即java方法名相同而参数个数或参数类型不同 运行是多态:即重写,是指java运行根据调用者的类型,判断调用哪个方法。 多态的目的 :增加代码的灵活度 2.abstract class和interface的区别 abstract class抽象类 : 构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类。 interface接口 : 接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。 区别 : 1、抽象类中可以有构造函数,接口里没有。 2、抽象类中可以有普通成员变量,接口中没有普通成员变量。 3、抽象类可以有包含非抽象的普通方法,接口中的方法都必须是抽象的。 4

C++多态性(静多态和动多态)

感情迁移 提交于 2020-01-29 05:31:13
C++ 多态性 C++中的多态(虽然多态不是C++所特有的,但是C++中的多态确实是很特殊的)分为静多态和动多态(也就是静态绑定和动态绑定两种现象),静动的区别主要在于这种绑定发生在编译期还是运行期,发生在编译期的是静态绑定,也就是静多态;发生在运行期的则是动态绑定,也就是动多态。 静多态可以通过模板和函数重载来实现(之所说C++中的多态主要还是因为模板这个东西),下面举两个例子: 1)函数模板 template <typename T> T max(const T& lsh, const T& rhs) { return (lsh > rhs) ? lsh : rhs; } 返回两个任意类型对象的最大值(对象),前提是该类型能够使用>运算符进行比较,并且返回值是bool类型。 使用: int a = 3; int b = 4; cout << max(a, b) << endl; float c = 2.4; float d = 1.2; cout << max(c, d) << endl; 输出结果为: 4 2.4 这种绑定发生在编译期,这是由于模板的实例化是发生在编译期的,即在编译时编译器发现你调用max(a, b)时就自动生成一个函数 int max(const int& lsh, const int& rhs) { return (lsh > rhs) ? lsh :

Java面向对象思想之 多态

允我心安 提交于 2020-01-29 00:24:19
Java面向对象之 多态 多态: 同一个对象,体现出来的多种不同的形态(身份),导致将 一种行为表现为不同的效果 要想实现多态的效果,需要先有继承关系 多态的体现: 父类的引用,指向子类的对象 如Teacher继承Person //原来创建对象的时候 Teacher t = new Teacher();//这个老师是个老师 多态的体现: Person p = new Teacher();//这个人是个老师 p只能调用父类中定义的属性和方法,体现出来的是人的身份 强制向下转型时可能会出现一个运行时异常:ClassCastException(造型异常) 如果想要避免出现运行时异常可以运用instanceof关键字判断当前引用指向的是不是后面的类型 见到的运行时异常:inputMissMathException 输入不匹配 NumberFormatException数字格式化异常 ArrayIndexOutOfBoundsException数组索引越界 NegativeArraySizeException 数组长度负数 new数组的时候,给的长度必须时正数的。负数不行 NullPointerException空指针异常 Person p = null; ArithmeticException 算数异常 1/0; ClassCastException 造型异常 将对象的类型还原时

25. java面向对象 - 多态

佐手、 提交于 2020-01-28 17:40:26
一、定义 ​ 多态性的使用前提:① 类的继承关系 ② 要有方法的重写 ​ instanceof关键字使用:a instanceof A,判断对象a是否为类A的实例 public class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } public void eat() { System.out.println("父-吃饭"); } public void sleep() { System.out.println("父-睡觉"); } } public class Man extends Person { public Man(String name, int age) { super(name, age); } public void eat(){ System.out.println("男人吃肉"); } } public class Woman extends Person { public Woman(String name, int age) { super(name, age); } public void eat() { System.out.println("女人吃菜"); } } public

面向对象-多态

丶灬走出姿态 提交于 2020-01-28 11:05:54
代码当中体现多态性,其实就是一句话, 父类引用指向子类对象 格式: 父类名称 对象名 = new 子类名称() 或者: 接口名称 对象名 = new 实现类名称(); 使用多态的好处: 无论右边边new的是哪个子类对象,左边的调用方法都不会变,都可以并且只能调用父类或是接口中的方法,除非覆盖 访问成员变量的两种方式 : 1.直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找 2.间接通过成员方法访问成员变量:看该方法属于谁,优先用谁,没有则向上找 访问成员方法的方式: 看new的是谁,就优先用谁,没有则向上找 成员变量:编译看左边,运行也看左边 成员方法:编译看左边,运行看右边 注意: 对象向上转型就是多态写法,向上转型一定是安全的,从小范围转向了大范围 但是对象一旦向上转型为父类,那么就无法调用子类特有内容,此时可以向下转型 向下转型格式: 子类名称 对象名 = (子类名称)父类对象 注意: 向下转型时,要确保要转型的对象,原本就是此对象,不然会报错 此时可以用到instanceof关键字类判断 判断前面的对象能不能当作后面类型的实例,boolean值,格式: 对象名 instanceof 类名称 //父类 public class Fu { int num = 10 ; //父类成员变量 public void show ( ) { //父类成员方法

JAVAEE细细看 进阶 02 - 多态

社会主义新天地 提交于 2020-01-28 04:55:53
多态 同一个对象,在不同时刻表现出来的不同形态 举例:猫 我们可以说猫是猫:猫 cat = new 猫(); 我们也可以说猫是动物:动物 animal = new 猫(); 这里猫在不同的时刻表现出来了不同的形态,这就是多态 一. 多态的前提和体现 有继承/实现关系(父类,接口) 有方法重写 有父类引用指向子类对象 二. 多态中成员的访问特点 成员变量:编译看左边,执行看左边 (前提是变量不能封装,即不能私有) 成员方法:编译看左边,执行看右边 为什么成员变量和成员方法的访问不一样呢: 答案:因为成员方法有重写,而成员变量没有 三. 抽象类 (abstract) 抽象类的特点: 抽象类的成员特点: 四. 接口 (interface) 概述: 接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用 Java中的接口更多的体现在对行为的抽象上 接口的特点: a. 接口用关键字interface修饰 public interface 接口名{} b. 类实现接口,用implements 表示 public class 类名 implements 接口名 {} c. 接口不能实例化 接口如何实例化?参照多态的方式,通过实现类对象的实例化,这叫做接口多 态 多态的形式:具体类多态,抽象类多态,接口多态 多态的前提:有几成或者实现关系;有方法重写;有父(类/接口)引用指向(子/ 实现

JavaSE多态

核能气质少年 提交于 2020-01-27 18:39:42
多态性在java中的体现: 1.方法重写和重载 2.对象的多态性–可以直接应用在抽象类和接口上 java引用变量有两种类型,编译时类型和运行时类型,编译时类型由声明该变量时使用的类型决定,运行时类型由实际复制给该变量的对象决定 两者不一致就会出现多态 判断是否为多态存在“is-a”规则,他表明子类的每个对象也是父类的对象 例如 Employee e = new Employee ( ) ; Employee e = new Manager ( ) ; Manage类设置为Employee类的子类,因为每个经理都是雇员,反之不是每个雇员都是经理,这就是"is-a”原则。 Employee类既可以引用一个Employee类对象,也可以引用Employee类任何一个子类的对象。 而实现多态需要做两件事 1.子类对象可以直接复制给父类变量,但运行时依然表现出子类的特征,这以为这同一个类型的对象可能有不同的行为特征,比如上述的Employee和Manager 2.方法重写,子类继承父类并重写父类中已有的抽象方法 来源: CSDN 作者: Vince_Wang1 链接: https://blog.csdn.net/Vince_Wang1/article/details/104094088