多态

接口、 多态

青春壹個敷衍的年華 提交于 2020-02-05 01:44:43
接口,是java语言中的一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法、成员方法,那么 接口的内部主要就是封装了方法,包含抽象方法(jdk7及以前),默认方法和静态方法(jdk8),私有方法(jdk9) 接口的定义 关键字:interface 它也会编译成.class文件,但它并不是类而是另外一种引用类型 引用数据类型:数组 类 接口 不能创建对象,但是可以implements public interface 接口名称 { // 抽象方法 // 默认方法 // 静态方法 // 私有方法 } 抽象方法:使用 abstract 关键字修饰,可以省略,没有方法体。该方法供子类实现使用。 默认方法:使用 default 修饰,不可省略,供子类调用或者子类重写。 静态方法:使用 static 修饰,供接口直接调用。 私有方法:使用 private 修饰,供接口中的默认方法或者静态方法调用。 非抽象子类实现接口: 必须重写接口中所有抽象方法。 继承了接口的默认方法,即可以直接调用,也可以重写。 私有方法:只有默认方法可以调用。 私有静态方法:默认方法和静态方法可以调用。 接口可以做多实现 在继承体系中,一个类只能继承一个父类。而对于接口而言,一个类是可以实现多个接口的,这叫做接 口的多实现。并且,一个类能继承一个父类,同时实现多个接口。 抽象方法 接口中,有多个抽象方法时

Java 多态 向下转型

百般思念 提交于 2020-02-05 01:09:09
向下转型:    子类引用指向父类对象,此处必须 强制转换 ,可以调用子类特有方法。例:     Animal two = new Cat(); Cat temp = (Cat)two;   若满足转型条件时才能进行强转。      判断一个对象是否是某个类的实例: 来源: https://www.cnblogs.com/CPU-Easy/p/12262276.html

三大特性:多态

喜你入骨 提交于 2020-02-04 17:49:36
多态 类的继承有两层意义:1.改变 2.扩展 多态就是类的这两层意义的一个具体的实现机制 即,调用不同的类实例化得对象下的相同的方法,实现的过程不一样 多态的概念指出了对象如何通过他们共同的属性和动作来操作及访问,而不需考虑他们具体的类。多态表明了动态(又名,运行时)绑定的存在,允计重载及运行时类型确定和验证具体表现形式:多个子类同时继承基类,并同时可执行基类的方法,并返回不同的结果;举例:水是一个类不同温度,水被实例化成了不同的状态:冰,水蒸气,雾(然而很多人就理解到这一步就任务此乃多态,错,fuck!,多态是运行时绑定的存在)(多态体现在由同一个类实例化出的多个对象,这些对象执行相同的方法时,执行的过程和结果是不一样的)冰,水蒸气,雾,有一个共同的方法就是变成云,但是冰.变云(),与水蒸气.变云()是截然不同的两个过程,虽然调用的方法都一样 class H2O: def __init__(self,name,temperature): self.name=name self.temperature=temperature def turn_ice(self): if self.temperature < 0: print('[%s]温度太低结冰了' %self.name) elif self.temperature > 0 and self.temperature < 100:

python学习日记(继承和多态)

橙三吉。 提交于 2020-02-04 17:47:08
继承 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。 比如,我们已经编写了一个名为 Animal 的class,有一个 run() 方法可以直接打印: class Animal(object): def run(self): print('Animal is running...') 当我们需要编写 Dog 和 Cat 类时,就可以直接从 Animal 类继承: class Dog(Animal): pass class Cat(Animal): pass 对于 Dog 来说, Animal 就是它的父类,对于 Animal 来说, Dog 就是它的子类。 Cat 和 Dog 类似。 继承有什么好处?最大的好处是子类获得了父类的全部功能。由于 Animial 实现了 run() 方法,因此, Dog 和 Cat 作为它的子类,什么事也没干,就自动拥有了 run() 方法: dog = Dog() dog.run() cat = Cat() cat.run() 运行结果如下: Animal is running... Animal is running... 当然,也可以对子类增加一些方法,比如Dog类:

多态(Java)

戏子无情 提交于 2020-02-04 17:43:51
多态(Java) 一、多态 1、什么是多态? 不同的对象对于同一个操作,做出的响应不同 具有表现多种形态的能力的特征 2、使用多态的优点 : 为了实现统一调用 二、子类到父类的转换(向上转型) ① 将一个父类的引用指向一个子类对象,成为向上转型,自动进行类型转换 ② 此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,不是父类的方法 ③ 通过父类引用变量无法调用子类特有的方法 三、java中两种实现和使用多态的方式 ① 使用父类作为方法形参 ② 使用父类作为方法返回值 四、父类到子类的转换(向下转型) 将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转型。此时必须进行强制类型转换 五、instanceof运算符 语法: 对象 instanceof 类或接口 该运算符用来判断一个对象是否属于一个类或者实现了一个接口,结果为true或false 注: ① 使用instanceof运算符时,对象的类型必须和instanceof的第二个参数所指定的类或接口在继承树上有上下级关系,否则会出现编译错误 ② instanceof通常和强制类型转换结合使用 一、多态 1、什么是多态? 不同的对象对于同一个操作,做出的响应不同 具有表现多种形态的能力的特征 2、使用多态的优点 : 为了实现统一调用 二、子类到父类的转换(向上转型) ① 将一个父类的引用指向一个子类对象,成为向上转型

Java多态

拟墨画扇 提交于 2020-02-04 17:43:12
多态        意义:同一个事物,由于条件不同,执行的结果不同。在Java中实质上指的同一引用类型,使用不同的实例而执行结果不同的。    注意:【1】同一个类型,一般指父类       【2】不同:不同的子类实例,同一个方法执行的父类或者子类方法;     实现多态规则:       【1】必须有继承关系,子类有一定要重写/实现父类的方法       【2】本质是 运行时 父类引用之类重写的方法        Super s = new Sub()          多态的实现形式        【1】父类型引用子类对象(本质) //父类作为一引用类型 Super s = null; //父类引用子类sub1的重新方法 s= new sub1(); s.showInfo(); //输出子类sub1的方法 //父类引用子类sub2的重新方法 s=new sub2(); s.showInfo(); //输出子类sub2的方法          【2】父类作为方法形参实现多态   public void feed(Pet pet) {    pet.getName()    }        【3】父类作为方法的返回值实现多态   public Pet adoptPet(int type) {    Pet pet = null;    if(1 == type) {    pet

封装.继承.多态

只愿长相守 提交于 2020-02-04 17:42:24
封装 1. 封装 :隐藏类内部细节 2. 封装 步骤 :   第一步:将属性私有化.(private)   第二步:提供getter/setter方法(getXxxx(),setXxxx()).   第三步:在getter/setter中加入控制语句. 3. this关键词   this:表示当前对象.   调用属性:this.属性名   调用方法:this.方法名();   this():表示调用构造函数. 注意 :this(),必需写在构造函数的第一行. 继承(extends) 1. 继承 :遗传 2. 语法   public class 子类 extends 父类{     //代码块   } 例:public class Dog extends Pet {     //代码块 } 3. 继承的特点   a.子类可以继承父类的非私有的属性和方法   b.不能继承构造方法   c.继承默认权限修饰符的方法和属性,子类和父类必需在同一包中 4. super(父类)   super.属性名; //表示访问父类的属性   super.方法名(参数); //表示访问父类的方法   super(参数);//表示访问父类的构造函数; 注意 :super()访问父类构造函数时,必需写在第一行; 多态 1. 多态含义 :一个事物的多种形态 2. 多态的表现   行为(方法)多态:重写和重载.

python基础——继承和多态

▼魔方 西西 提交于 2020-02-04 16:28:08
python基础——继承和多态       在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class) 。   比如,我们已经编写了一个名为 Animal 的class,有一个 run() 方法可以直接打印: class Animal(object): def run(self): print('Animal is running...')    当我们需要编写 Dog 和 Cat 类时,就可以直接从 Animal 类继承: class Dog(Animal): pass class Cat(Animal): pass   对于 Dog 来说, Animal 就是它的父类,对于 Animal 来说, Dog 就是它的子类。 Cat 和 Dog 类似。    继承有什么好处?最大的好处是子类获得了父类的全部功能 。由于 Animial 实现了 run() 方法,因此, Dog 和 Cat 作为它的子类,什么事也没干,就自动拥有了 run() 方法: dog = Dog() dog.run() cat = Cat() cat.run()    运行结果如下: Animal is running... Animal is

python3-继承和多态

那年仲夏 提交于 2020-02-04 16:27:43
在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。 比如,我们已经编写了一个名为 Animal 的class,有一个 run() 方法可以直接打印: class Animal(object): def run(self): print('Animal is running...') 当我们需要编写 Dog 和 Cat 类时,就可以直接从 Animal 类继承: class Dog(Animal): pass class Cat(Animal): pass 对于 Dog 来说, Animal 就是它的父类,对于 Animal 来说, Dog 就是它的子类。 Cat 和 Dog 类似。 继承有什么好处?最大的好处是子类获得了父类的全部功能。由于 Animial 实现了 run() 方法,因此, Dog 和 Cat 作为它的子类,什么事也没干,就自动拥有了 run() 方法: dog = Dog() dog.run() cat = Cat() cat.run() 运行结果如下: Animal is running... Animal is running... 当然,也可以对子类增加一些方法,比如Dog类: class

虚函数(动多态)的处理流程

蓝咒 提交于 2020-02-04 15:42:12
多态: 同一接口 不同形态 1.静多态 编译阶段确定函数的调用(函数重载、模板) 2.动多态 运行时确定函数的接口(virtual触发、在运行时拿到函数的入口地址) 3.宏多态 预编译时确定函数的接口(很少涉及) 虚函数给予动多态支持 一个.cpp文件到一个.exe运行文件的过程: 1.编译 2.链接 3.运行 链接到运行过程中发生了什么? 备注: 符号表中存放的是函数的入口地址 在运行前所有的数据都是在磁盘上存储,运行时数据加载到内存中 1.合并段和合并符号表(所以在链接过后已经有了函数入口地址,但是此时的函数入口地址是存放在磁盘中的) 2.符号解析(把代码中的符号处理掉 在符号引用的地方找到符号定义的地方) 3.分配地址和空间 4.在text段进行符号的重定位 以Linux系统为例.o文件生成ELF文件格式 这样一来就实现了在运行时确定函数的接口,实现了动多态 来源: CSDN 作者: VegeTass 链接: https://blog.csdn.net/qq_44777506/article/details/104168514