多态

封装、继承和多态,重写、重载等基础复习

旧街凉风 提交于 2019-12-05 05:26:11
重载overloading 1.方法名相同,形参不同(包括参数顺序不同、类型不同、个数不同); 2.方法的返回值类型可同也可不同,所以不能用返回值类型来区分重载函数; 3.重载方法与被重载的方法可以抛出不同的异常; 4.重载体现了多态的特性:调用方法时根据传递的参数不同来决定具体调用那个重载方法,这就是多态性; public class Dog { Dog() { this.bark(); } //bark()方法是重载方法 void bark(){ System.out.println(\"no barking!\"); this.bark(\"female\", 3.4); } //注意:重载的方法的返回值都是一样的, void bark(String m,double l) { System.out.println(\"a barking dog!\"); this.bark(5, \"China\"); } //不能以返回值区分重载方法,而只能以“参数类型”和“类名”来区分 void bark(int a,String n) { System.out.println(\"a howling dog\"); } public static void main(String[] args) { Dog dog = new Dog(); dog.bark(); dog.bark(

多态

不羁的心 提交于 2019-12-05 04:49:31
多态的前提: A:要有继承关系。 B:要有方法重写。 其实没有也是可以的,但是如果没有这个就没有意义。 动物 d = new 猫();//读的时候从右往左读(也可以这样理解猫是new出来的对象, 而左边是一个类。所以就相当于判断一个对象是不是这个类的实例)猫是猫,猫是动物。 d.show(); 动物 d = new 狗(); d.show(); C:要有父类引用指向子类对象。 父 f = new 子(); 用代码体现一下多态。 多态中的成员访问特点: A:成员变量 编译看左边,运行看左边。 B:构造方法 创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。 C:成员方法 编译看左边,运行看右边。 D:静态方法 编译看左边,运行看左边。 (静态和类相关,算不上重写,所以,访问还是左边的) 由于成员方法存在方法重写,所以它运行看右边。 class Fu { int num =5; static void method4() { System.out.println("fu method_4"); } void method3() { System.out.println("fu method_3"); } } class Zi extends Fu { int num =8; static void method4() { System.out.println("zi

python_面向对象——多态

耗尽温柔 提交于 2019-12-05 04:17:47
1.同一接口,多种形态 class Document: def __init__(self,name): self.name = name def show(self): # 异常处理:提示子类必须把此方法重新写一遍 raise NotADirectoryError('子类必须把此方法重新写一遍') class Pdf(Document): def show(self): print('pdf文档') class Word(Document): def show(self): print('word文档') pdf_obj = Pdf('wdc.pdf') word_obj = Word('yhf.doc') # 将多个对象放到一个列表中 objs = [pdf_obj,word_obj] # 循环这个列表,来实现同一接口多种形态 for i in objs: i.show() 来源: https://www.cnblogs.com/wangdianchao/p/11905199.html

java-多态和动态绑定

耗尽温柔 提交于 2019-12-05 04:00:23
一、什么是多态    一个对象变量可以指示多种实际类型。当程序运行时,才能确定该变量引用的哪个类的对象,从而虚拟机自动选择调用哪个方法,这也被称为动态绑定。 二 、理解方法的调用过程   我们以x.f(args)为例,A x = new B()。 1.编译器查看对象变量的声明类型和方法名    x声明为A类,编译器将列举A类及其父类中 可以被继承的 所有名为 f 的方法。由于可能存在重载,名为 f 但参数列表不同的方法可能有多个。    至此编译器获得了所有可能被调用的候选方法。 2.编译器查看调用该方法时提供的参数列表,进行重载解析   如果在候选方法中有与提供的参数列表完全匹配的方法,则选择该方法;   如果没有完全匹配的方法,进行隐式类型转换( 如int可转为double,低精度向高精度转;Son可转为Father,向上转型)可以匹配,则选择该方法。   如果没有一个方法与提供的参数列表匹配,或转型后有多个匹配,都会报错。    至此,编译器获得了需要调用的方法名和参数列表。 3.当程序运行时,动态绑定调用方法。   查找x引用的对象的实际类型,这里为B类。   首先查找x的实际类型B类中有没有具有该参数列表的方法,若有,直接调用该方法。   否则查找其父类A类中查找,以此类推。   为了节约开销,虚拟机预先为每个类创建了一个方法表,只需要查找这个方法表即可。   

day20191120笔记

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-05 03:46:44
1.spring的优势 U盘拷。总结。微信公众号:。 2.笔试,课前默写,默完之后要回答问题。 3.微服务,带着,知识点,卷子。ssm整个东西讲一下。面试是综合能力。背面试题。 通过 基础很重要。学精烂熟于心,多读多背,烂熟于心。垂直架构。考评。卷子,做完,第二天上课之前,统计每个组的成绩,处罚,练习。写的比较好的卷子,录屏敲3遍。对就业有要求。作业要求。把事情做在平时,而不是临时抱佛脚。脚踏实地完成每个任务,当做求职面试题。 复杂查询的SQL语句,Oracle语句,自己的进度和节奏,薪资,不拖大腿。突破8,10,K,拿多少钱做多少事情,Oracle锁,性能优化,性能调整,记很多的文档。查漏补缺。 课上记录草稿,回家再认真整理一遍。可以电子记录也可以手记录。 屏幕共享。 学软件就是解决生活问题。写代码的意义是干嘛的? 为什么做这件事情?说出具体能够说服我的理由,不是借口。克服一切困难,方法总比困难多。为什么要这么干?学这个作用是什么?你学这个解决什么问题?那你浪费脑袋干嘛?你为什么要做这件事情?为什么?告诉你为什么?如果你这么做结果是什么?如果你不这么做结果是什么?最坏结果放在第一位,知道最好结果和最坏结果。 面向对象?对象? 继承? 重载?对应规律口诀:读两遍:方法重载:同类,同名,不同参,和方法的返回值和访问修饰符无关。 重写?不同类,同名,同参,同返回值类型

Python之多态案例

拈花ヽ惹草 提交于 2019-12-05 02:53:33
class Canvas: def draw_pic(self, shape): print('--start draw--') shape.draw(self) class Rectangle: def draw(self, canvas): print('draw rectangle on %s' % canvas) class Triangle: def draw(self, canvas): print('draw triangle on %s' % canvas) class Circle: def draw(self, canvas): print('draw circle on %s' % canvas) c = Canvas() c.draw_pic(Rectangle()) c.draw_pic(Triangle()) c.draw_pic(Circle()) 谢谢! 来源: https://www.cnblogs.com/zhzhang/p/11899745.html

Java面试参考指南

谁说胖子不能爱 提交于 2019-12-05 00:15:26
Java面向对象相关概念 Java是一种基于面向对象概念的编程语言,使用高度抽象化来解决现实世界的问题。 面向对象的方法将现实世界中的对象进行概念化,以便于在应用之间进行重用。例如:椅子、风扇、狗和电脑等。 Java里的类(Class)是一个蓝图、模板,或者称之为原型,它定义了同一类事物的相同属性和行为。实例(Instance)是某个类的一个具体实现,同一个类所有的实例拥有相同的属性。举例来说,你可以定义一个类叫做“房子(House)”,这个类拥有一个属性叫做“房间数(number of room)”,这样你就可以创建一个“房间数”为2的“房子”实例,你还可以创建一个“房间数”为3的“房子”实例,等等等等。 优点: 面向对象软件开发的若干优点在于: 模块化,维护成本低; 更好的代码重用,具备继承性,开发更为敏捷; 更好的代码可靠性和灵活性; 对现实世界进行建模,易于理解; 对象水平的抽象; 从一个开发阶段向另一个开发阶段过渡更为简便。 面向对象软件系统(OOPS)的四大主要特征为: 封装(Encapsulation) 继承(Inheritance) 多态(Polymorphism) 抽象(Abstraction) 封装(Encapsulation) 封装机制在对象之间提供了一种隐藏域可见性的协议。Java中使用可见性修饰符private将方法和变量限制在类内部

C++虚函数以及虚函数表

China☆狼群 提交于 2019-12-04 22:00:30
在了解虚函数之前先了解下对象模型: 对象模型: 在C++中,有两种数据成员(class data members):static 和nonstatic,以及三种类成员函数(class member functions):static、nonstatic和virtual: 说明:采用的是非继承下的C++对象模型: nonstatic 数据成员被置于每一个类对象中,而static数据成员被置于类对象之外。static与nonstatic函数也都放在类对象之外,而对于virtual 函数,则通过虚函数表+虚指针来支持,具体如下: 每个类生成一个表格,称为虚表(virtual table,简称vtbl)。虚表中存放着一堆指针,这些指针指向该类每一个虚函数。虚表中的函数地址将按声明时的顺序排列,不过当子类有多个重载函数时例外。 每个类对象都拥有一个虚表指针(vptr),由编译器为其生成。虚表指针的设定与重置皆由类的复制控制(也即是构造函数、析构函数、赋值操作符)来完成。vptr的位置为编译器决定,传统上它被放在所有显示声明的成员之后,不过现在许多编译器把vptr放在一个类对象的最前端。 另外,虚函数表的前面设置了一个指向type_info的指针,用以支持RTTI(Run Time Type Identification,运行时类型识别)。RTTI是为多态而生成的信息,包括对象继承关系

# 20182304 实验八 《数据结构与面向对象程序设计》实验报告

对着背影说爱祢 提交于 2019-12-04 19:04:14
20182304 实验八 《数据结构与面向对象程序设计》实验报告 课程:《程序设计与数据结构》 班级: 1823 姓名: 张子正 学号:20182304 实验教师:王志强 实验日期:2019年9月17日 必修/选修: 必修 1.实验内容 参考教材PP16.1,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder) 用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息 课下把代码推送到代码托管平台 基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能,比如给出中序HDIBEMJNAFCKGL和后序ABDHIEJMNCFGKL,构造出附图中的树 用JUnit或自己编写驱动类对自己实现的功能进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息 课下把代码推送到代码托管平台 自己设计并实现一颗决策树 提交测试代码运行截图,要全屏,包含自己的学号信息 课下把代码推送到代码托管平台 输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果(如果没有用树,正常评分。如果用到了树,即使有小的问题,也酌情给满分) 提交测试代码运行截图,要全屏,包含自己的学号信息 2.

多态

无人久伴 提交于 2019-12-04 18:19:13
package testMap; public class Cf { int i; public Cf(){ add(1); } void add(int v){ i = i+v; System.out.println("father add "+i); } } package testMap; public class Cs extends Cf { public static void main(String []args){ new Cs(); } public Cs(){ add(2); } void add(int v){ i = i+v*2; System.out.println("son add:"+i); } } 上面代码输出的是: son add:2 son add:6 正常情况下,如果通过多态将父类型的引用指向子对象地址,调用某个被覆盖的方法时,这时调用到的就是子类定义的方法。 public class Father{ public void say(){     System.out.println("father say:")   } } public class Son extends Father{   public void say(){     System.out.printlin("son say")  } public static void