多态

[Day11]接口、多态

蓝咒 提交于 2020-02-13 12:16:52
1.接口   (1)接口定义: interface关 键字 ,所在文件仍然是.java文件,编译后仍产生.class文件。    定义格式      public interface 接口名{       抽象方法1;       抽象方法2;       抽象方法3;     }    注意:a.接口中的方法均为 公共方法 访问的抽象方法。b.接口中 无法 定义普通的成员变量。   (2)类实现接口:类与接口的关系,实现使用 implements 。     格式:      class 类 implements 接口{       重写接口中的方法     }     在类实现中,该类将接口中的抽象方法继承过来,此时该类需要 重写 抽象方法,完成具体的逻辑。      类是现实事物的描述,接口是功能的集合 。   (3)接口中成员的特点     a.接口中的变量需要用固定的修饰符修饰 public static final ,接口中的变量称之为常量,不可改变。     b.接口中的方法需要用固定的修饰符修饰 public abstract 。     c.接口 不可以创建对象 。     d.子类必须覆盖掉接口中 所有 的抽象方法后,子类才可以实例化,否则子类是一个抽象类。   (4)接口的多实现:接口最重要的体现是 解决多继承的弊端。     弊端指的是在多继承时

java 多态

拜拜、爱过 提交于 2020-02-12 21:12:18
java 多态 多态是实现代码重用的一种机制。 重载:调用一系列具有相同名称的方法,这些方法可根据传入参数的不同而得到不同的处理结果,这属于静态多态,在代码编译阶段就确定下来。 动态多态:在程序运行阶段才能体现出来。简称为多态。 多态存在的前提:1.要有继承关系;2.子类要重写父类方法;3.父类引用指向子类。 向上转型:父类对象通过子类对象实例化。 向下转型:父类对象转换为子类对象,但必须强制转换。 //一、向上转型: class Animal { int age = 10 ; public void eat ( ) { System . out . println ( "动物吃东西" ) ; } public void shout ( ) { System . out . println ( "动物在叫" ) ; } public static void run ( ) { System . out . println ( "动物在跑" ) ; } } class Dog extends Animal { //满足了:1.要有继承关系 String name = "dog" ; public void eat ( ) { //满足了:2.子类要重写父类方法 System . out . println ( "dog is eating" ) ; } public static

关于C++的多态

别等时光非礼了梦想. 提交于 2020-02-12 15:38:02
多态英文叫做polymorphism,有两种多态,编译时多态,靠重载实现;运行时多态,靠虚函数实现。 所谓纯虚函数指的是一个虚函数没有给出实现,包含纯虚函数的类就叫做抽象类。 来源: CSDN 作者: 钱德勒马 链接: https://blog.csdn.net/u013516861/article/details/104277438

JAVA多态,重载(overload)与重写(override)的区别

梦想与她 提交于 2020-02-12 00:31:38
文章目录 方法重载 方法重写 多态是指不同子类型的对象对同一消息做出不同的反应。 多态的好处是提高了代码的可扩展性。 多态的实现要满足以下前提: 方法重写(子类继承父类,并重写父类已有的或抽象的方法) 对象造型(用父类型的引用指向子类型的对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现不同的行为) 比如: List test = new ArrayList(); 多态的实现方式包括方法重载(overload)与方法重写(override)。 方法重载 重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。 每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。最常见的就是构造器的重载。 方法重写 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。 方法重载与方法重写的区别: 区别点 方法重载 方法重写 参数列表 必须修改 一定不能修改 返回类型 可以修改 一定不能修改 异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常 访问 可以修改 一定不能做更严格的限制(可以降低限制) 来源: CSDN 作者: westwewe 链接: https://blog.csdn.net/westwewe/article

python面向对象编程——多态

拈花ヽ惹草 提交于 2020-02-11 22:58:36
面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 实现代码的重用 ,相同的代码不需要重复的编写 设计类的技巧 子类针对自己特有的需求,编写特定的代码 多态 不同的 子类对象 调用相同的 父类方法 ,产生不同的执行结果 多态 可以 增加代码的灵活度 以 继承 和 重写父类方法 为前提 是调用方法的技巧, 不会影响到类的内部设计 来源: CSDN 作者: 高压锅~HJ 链接: https://blog.csdn.net/u014651560/article/details/104268864

C++学习笔记7

瘦欲@ 提交于 2020-02-11 15:56:10
目录 六、动态联编与虚函数 1、联编的概念 2、静态联编 3、动态联编 4、虚函数 5、虚析构函数 6、纯虚函数和抽象类 六、动态联编与虚函数 1、联编的概念 联编是指一个计算机程序自身彼此关联(使一个源程序经过编译、 连接, 成为一个可执行程序) 的过程, 在这个联编过程中, 需要确定程序中的操作调用(函数调用) 与执行该操作(函数) 的代码段之间的映射关系, 按照联编所进行的阶段不同, 可分为静态联编和动态联编。 2、静态联编 静态联编又称静态束定、 早期联编、 前期联编。 静态联编是指联编工作是在程序编译链接阶段进行的, 静态联编又称早期联编, 因为这种联编是在程序开始运行之前完成的。 在程序编译阶段进行的这种联编又称静态束定, 在编译时就解决了程序中的操作调用与执行该操作代码间的关系, 确定这种关系又被称为束定, 编译时束定又称为静态束定。 静态联编就是, 编译器在程序运行前就知道调用什么函数做什么事 。 静态联编特点: 速度快效率高 。 3、动态联编 动态联编又称动态关联、 动态束定、 后期联编、 晚期联编。 动态联编是指编译程序在编译阶段并不能确切地知道将要调用的函数, 只有在程序执行时才能确定将要调用的函数, 为此要确切地知道将要调用的函数,要求联编工作在程序运行时进行, 这种在程序运行时进行的联编工作被称为动态联编。 C++规定: 动态联编是在 虚函数

virtual虚函数

允我心安 提交于 2020-02-11 11:39:15
  virtual是定义C++中 虚函数 的关键字,这种 函数 或 方法 可以被子类 继承 和 覆盖 ,通常使用 动态调度 实现。这一概念是 面向对象程序设计 中(运行时) 多态 的重要组成部分 。简言之,虚函数可以给出目标函数的定义,但该目标的具体指向在编译期可能无法确定。 在 面向对象程序设计 中,派生类继承自基类。使用 指针 或 引用 访问派生类对象时,指针或引用本身所指向的类型可以是基类而不是派生类。如果派生类覆盖了基类中的方法,通过上述指针或引用调用该方法时,可以有两种结果: 调用到基类的方法:编译器根据指针或引用的类型决定,称作“早绑定”; 调用到派生类的方法:语言的运行时系统 根据对象的实际类型决定 ,称作“ 迟绑定 ”。 虚函数的效果属于后者。如果问题中基类的函数是“虚”的,则调用到的都是最终派生类(英语:most-derived class)中的函数实现,与指针或引用的类型无关。反之,如果函数非“虚”,调用到的函数就在编译期根据指针或者引用所指向的类型决定。 来源: https://www.cnblogs.com/qq2806933146xiaobai/p/12294208.html

c++ 面试整理

别说谁变了你拦得住时间么 提交于 2020-02-11 02:58:10
1. 继承方式 public   父类的访问级别不变 protected 父类的public成员在派生类编程protected,其余的不变 private 父类的所有成员变成private #include <iostream> using namespace std; class base { public: void printa() { cout <<"base"<< endl; } protected: void printhello() { cout <<"helo"<< endl; } private: void printnohello() { cout <<"no hello"<< endl; } }; class derived : public base { public: void printb() { printhello(); } // void printc() { printnohello(); } //printnohello是父类的私有函数,不可访问 }; int main() { base a; a.printa(); //a.printhello(); //printhello是类derived的protected函数,不可访问。 } 2. sizeof 和 strlen 的区别 sizeof 是一个操作符,strlen 是库函数。

面向过程和面向对象及面向对象的三大特征

痴心易碎 提交于 2020-02-09 07:39:17
新手继续,大牛可以关闭浏览页了。 英文及缩写 :   面向过程:procedure oriented programming POP   面向对象:object oriented programming OOP 面向对象和面向过程的 历程 :   面向过程编程采取的是时间换空间的策略,因为在早期计算机配置低 ,内存小,如何节省内存则成了首要任务,哪怕是运行的时间更长。随着硬件技术的发展,硬件不再成为瓶颈,相反更好的模拟现实世界、系统的可维护性等问题凸显出来,于是面向对象设计应运而生。当下:应用在 PC 机上的一般应用系统,由于不太需要考虑硬件的限制,而系统的可维护性等方面却要求很高,一般采用面向对象方式;而在内存限制有所要求的嵌入式系统,则大多采用面向过程方式进行设计编程。 定义 :   面向过程是分析解决问题的步骤,然后用函数把这些步骤一步一步的实现,然后在使用的时候一一调用则可。面向对象是把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,而是为了描述某个事物在解决整个问题的过程中所发生的行为。下面举一例说明面向过程和面向对象编程。 首先使用面向过程: 1、开始游戏, 2、黑子先走, 3、绘制画面, 4、判断输赢, 5、轮到白子, 6、绘制画面, 7、判断输赢, 8、返回步骤2, 9、输出最后结果。 把上面每个步骤用分别的函数来实现,问题就解决了。

接口与抽象类那点事

喜夏-厌秋 提交于 2020-02-08 20:36:20
也谈接口和抽象类区别 好象这是一个老生常谈的问题,最近有个学生问我他们的区别,于是我就又想起这个话题。 有不少的文章在描述这两者,但好象都没有怎么从初学者的浅显角度来看。 其实这两者有很多相识之处,当然也有很多不同之处。要理解它们,应该先从面向对象思想开始。面向对象思想里面,最基本的就是封装,继承和多态。所谓封装,说的小,方法(函数)也就是对一种操作的封装,说的大,用类来描述一个具体的对象。 那么在面向对象程序中应该说对封装还有一层新的定义,即将类的描述抽象化,也就是说描述类的外貌而不去考虑它的实际。 那么我们回过头来看抽象类,它必须被继承使用,描述的其实是一种继承关系,即"is a"的关系。类继承它,也就是说类拥有它所有抽象方法等,那么也就是类遵循了它所定义的规范。但是呢,这种规范是通过继承而来,类的发展必须依赖它的父类。 abstract class 工作 { abstract void 上班() } class 张三 : 工作 { } abstract class 工作 { abstract void 上班() } class 人: 工作 { } class 李四 : 人 { } 我们从这个例子中不难看出,张三和李四同样都遵循抽象工作的规范,都拥有上班这个方法,但是呢,他们的发展始终受到父类的影响。 当然,我这里只是从它们使用的角度来看,我们还能从他们设计角度度来看