多态

05-封装、继承和多态

偶尔善良 提交于 2019-12-06 05:42:33
                封装、多态和继承  封装 原则: 将属性隐藏起来,若需要访问某个属性需要提供公共方法对其访问。(方法是一种封装,private关键字也是一种封装) private关键字 private是一个权限修饰符,代表最小权限 可以修饰成员变量和成员方法 被private修饰的成员变量或成员方法只能在别类中使用 this关键字 this代表所在类的当前引用(地址值),即对象自己的引用 private String name; public void setName(String name){ this.name = name; } 通过谁调用的方法谁就是this 构造方法 当一个对象被创建的时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。 修饰符 构造方法 (参数列表){ //构造方法名必须和所在的类名称(包括大小写)完全一样;无返回值 //方法体 } // 无参数构造方法 public Student() {} // 有参数构造方法 public Student(String name,int age) { this.name = name; this.age = age; } //不自定义有参构造方法时默认具有无参构造;一旦自定义了构造了有参构造方法,则必须新建无参构造方法就才能调用无参构造器 继承 继承:子类继承父类(父类、超类)的属性和行为

C#多态

跟風遠走 提交于 2019-12-06 05:25:22
1.1什么是虚方法? 在父类中使用 virtual 关键字修饰的方法, 就是虚方法。在子类中可以使用 override 关键字对该虚方法进行重写。 Virtual方法也可以单独执行。 1.2虚方法语法 父类: public virtual 返回值类型 方法名() { 方法体代码; } 子类: public override 返回值类型 方法名() { 方法体代码; } class CatType { public virtual void Cry() { Console.WriteLine("深呼吸,张开嘴巴,开始:"); } } class Cat:CatType { public override void Cry() { base.Cry(); Console.WriteLine("喵喵喵"); } } class Tiger:CatType { public override void Cry() { base.Cry(); Console.WriteLine("咆哮"); } } 1.3.虚方法使用细节 ①将父类的方法标记为虚方法, 就是在父类方法的返回值前加 virtual 关键字,表示这个方法可以被子类重写。 ②子类重写父类方法, 在子类的方法的返回值前加 override 关键字。 ③父类中的虚方法, 子类可以重写, 也可以不重写。 ④父类中用 virtual

多态 子类函数重写

社会主义新天地 提交于 2019-12-06 04:59:41
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 class boss{ 5 public: 6 int fight(){ 7 int ret = 10; 8 cout << "boss::fight():ret=" << ret << endl; 9 return ret; 10 } 11 }; 12 class master{ 13 public: 14 virtual int eight(){ 15 int ret = 8; 16 cout << "master::eight():ret=" << ret << endl; 17 return ret; 18 } 19 }; 20 class newmaster:public master{ 21 public: 22 int eight(){ 23 int ret = master::eight()*2; 24 cout << "newmaster:eight():" << ret << endl; 25 return ret; 26 } 27 }; 28 void pk(master*master,boss*boss){ 29 int k = master->eight(); 30 int b = boss->fight(); 31 if(k

面向对象三大特征之--多态

↘锁芯ラ 提交于 2019-12-06 04:59:01
什么是多态? 多态是指同一方法由于调用对象不同,产生不同的行为。其实就是对象的多种形态。 python里面产生多态,要满足2个条件,继承和方法的重写。 看下面这段代码,定义了一个叫Person的对象,里面有一个eat吃饭的方法,下面的3个子类China,English,Indian都继承了Person类,重写了父类的eat方法。这样的行为就叫多态。 运行结果: 来源: https://www.cnblogs.com/xiamaojjie/p/11963019.html

python 接口类、抽象类、多态

感情迁移 提交于 2019-12-06 04:30:40
参考https://www.cnblogs.com/Fantac/p/11481114.html 接口类和抽象类总结 在python中没有接口类,但有抽象类;abc模块中的metaclass = ABCMeta,@abstractmethod它的本质是做代码的规范用的,希望子类中能实现父类名字完全一样的方法 接口类和抽象类: 从java的角度上看是有区别的,java本来就支持单继承所以就有了抽象类;java没有多继承,所以为了接口隔离原则,设计了接口这个概念,支持多继承了 而python它既支持单继承也支持多继承,所以对于接口类和抽象类的区别就不会那么明显了,甚至在python中没有内置接口类 多态 多态指的是一类事物有多种形态 python天生支持多态 from abc import abstractmethod,ABCMeta class Payment(metaclass=ABCMeta): #支付方式类 @abstractmethod def pay(self,money): pass class Wechat(Payment): #支付方式---微信支付 def pay(self,money): print('已经用了微信支付了%s元'%money) class Alipay(Payment): #支付方式---支付宝支付 def pay(self,money):

java多态

六眼飞鱼酱① 提交于 2019-12-06 04:15:56
Java多态就是为了降低耦合,方便我们开发的一种特性。 比如我写了一个动物的接口。然后我通过接口实现了猫和狗这个类。 在我需要使用的时候我可以这样实例化对象 动物 w = new 猫。 这就是向上转型。 这里就有一点疑问了,我们开发人员为啥不直接写个猫和狗的类。为啥偏偏要写一个接口。这不是在多此一举吗? 下面就我个人理解,仅供参考。 java是什么,是一个面向对象的工程型语言。这意味着啥,这意味着我们可能几十个人,或者几百个人一起开发同一个项目。 一个人有一个自己的开发习惯,如果我们所有人开发人根据需求,自己搞自己的代码块或者功能。那万一我们几十个人写完了发现,我靠,怎么代码合在一起的时候怎么到处都是错(变量,方法名不一致等等),程序跑不动了呀。 这样一搞,说个屁,效率多低呀。不行,不能这样搞开发。 然后就要有个开发项目的规范,刚才说了,每个开发人员有自己的开发习惯,那怎么规范嘛?这时候,就需要大佬上场了。谁来当老大嘛,没办法,就找那个头发最少的,写代码写的最多的人来当标准吧。 这样也可以服众,毕竟人家是前辈,人家代码写的多,把他来当标准,没啥问题。 那么问题来了,具体怎么规范呢?这时候就需要接口这个概念了。 那个头发最少的大佬,来写项目的规范(接口),那些接口里面有我们普通开发人员必须要实现的方法和变量。 打个比方我是这个大佬(小声bb),我写个接口,然后别人来实现我的接口

设计模式之美学习(四):面向对象相比面向过程有哪些优势?面向过程真的过时了吗?

强颜欢笑 提交于 2019-12-06 03:28:25
除了面向对象之外,被大家熟知的编程范式还有另外两种,面向过程编程和函数式编程。面向过程这种编程范式随着面向对象的出现,已经慢慢退出了舞台,而函数式编程目前还没有被广泛接受。 在工作中,很多人搞不清楚面向对象和面向过程的区别,总以为使用面向对象编程语言来做开发,就是在进行面向对象编程了。而实际上,他们只是在用面向对象编程语言,编写面向过程风格的代码而已,并没有发挥面向对象编程的优势。这就相当于手握一把屠龙刀,却只是把它当作一把普通的刀剑来用,相当可惜。 什么是面向过程编程与面向过程编程语言? 我们可以对比着面向对象编程和面向对象编程语言这两个概念,来理解面向过程编程和面向过程编程语言。还记得之前是如何定义面向对象编程和面向对象编程语言的吗?让我们一块再来回顾一下。 面向对象编程是一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石 。 面向对象编程语言是支持类或对象的语法机制,并有现成的语法机制,能方便地实现面向对象编程四大特性(封装、抽象、继承、多态)的编程语言。 类比面向对象编程与面向对象编程语言的定义,对于面向过程编程和面向过程编程语言这两个概念,给出下面这样的定义。 面向过程编程也是一种编程范式或编程风格。它以过程(可以为理解方法、函数、操作)作为组织代码的基本单元,以数据(可以理解为成员变量、属性

设计模式之美学习(三):封装、抽象、继承、多态分别可以解决哪些编程问题?

主宰稳场 提交于 2019-12-06 03:28:01
理解面向对象编程及面向对象编程语言的关键就是理解其四大特性:封装、抽象、继承、多态。不过,对于这四大特性,光知道它们的定义是不够的,我们还要知道每个特性存在的意义和目的,以及它们能解决哪些编程问题。 封装(Encapsulation) 封装也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式(或者叫函数)来访问内部信息或者数据。 对于封装这个特性,我们需要编程语言本身提供一定的语法机制来支持。这个语法机制就是 访问权限控制 。 private 、 public 等关键字就是 Java 语言中的访问权限控制语法。 private 关键字修饰的属性只能类本身访问,可以保护其不被类之外的代码直接访问。如果 Java 语言没有提供访问权限控制语法,所有的属性默认都是 public 的,那任意外部代码都可以通过类似 wallet.id=123 ; 这样的方式直接访问、修改属性,也就没办法达到隐藏信息和保护数据的目的了,也就无法支持封装特性了。 封装的意义是什么?它能解决什么编程问题? 如果我们对类中属性的访问不做限制,那任何代码都可以访问、修改类中的属性,虽然这样看起来更加灵活,但从另一方面来说,过度灵活也意味着不可控,属性可以随意被以各种奇葩的方式修改,而且修改逻辑可能散落在代码中的各个角落,势必影响代码的可读性、可维护性

设计模式之美学习(二):到底什么是面向对象?

二次信任 提交于 2019-12-06 03:26:41
提到面向对象,相信很多人都不陌生,随口都可以说出面向对象的四大特性:封装、抽象、继承、多态。实际上,面向对象这个概念包含的内容还不止这些。 什么是面向对象编程和面向对象编程语言? 面向对象编程的英文缩写是 OOP ,全称是 Object Oriented Programming 。对应地,面向对象编程语言的英文缩写是 OOPL ,全称是 Object Oriented Programming Language 。 面向对象编程中有两个非常重要、非常基础的概念,那就是类( class )和对象( object )。这两个概念最早出现在 1960 年,在 Simula 这种编程语言中第一次使用。而面向对象编程这个概念第一次被使用是在 Smalltalk 这种编程语言中。 Smalltalk 被认为是第一个真正意义上的面向对象编程语言。 什么语言才算是面向对象编程语言呢?如果非得给出一个定义的话,可以用下面两句话来概括。 面向对象编程是一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石。 面向对象编程语言是支持类或对象的语法机制,并有现成的语法机制,能方便地实现面向对象编程四大特性(封装、抽象、继承、多态)的编程语言。 一般来讲,面向对象编程都是通过使用面向对象编程语言来进行的,但是,不用面向对象编程语言

多态,抽象类,接口

有些话、适合烂在心里 提交于 2019-12-06 00:13:02
1.多态: 前提:  a.类的继承   b.接口实现 注意: 父类的引用会调用子类中重写的方法,没有的话找父类 父类无法直接使用子类中独有的,若想用则需要转型 多态使用成员的特点: 1.使用成员变量:编译运行看父类|左边|类型 2.使用成员方法:编译看类型|左边|父类,运行找对象|右边|子类 转型: 向上——自动提升 向下——强制转化   子类类型 引用 = (子类类型)父类类型; 2.抽象类: 定义:没有方法体的方法。 特点:1.必须在抽象类中  2.被abstract修饰的方法 注意: 抽象类可以存在抽象方法,可以存在普通方法 抽象类不能实例化 抽象方法必须被重写 抽象类的使用:  1)具体子类:重写所有的抽象方法+按需新增   2)抽象子类:按需重写+按需新增 抽象方法一旦被重写可以不在被重写 abstract与static,private,final,native不能一起使用 3.接口:特殊的抽象类 优点: 接口可以多实现,类只能单继承 提高代码的复用性 解耦 定义开发规范 定义接口使用关键字interface 属性:   公共的静态的常量 public static final 数据类型 变量名 = 赋值;  修饰符可以省略,默认是 public static final,可以按需省略 方法:   公共的抽象的方法 public abstract 返回值类型 方法名();