多态

继承进阶

戏子无情 提交于 2019-11-30 03:19:42
一、复习 面向对象  1.类:具有相同属性和方法 的一类事物      类名可以实例化一个对象      类名可以调用类属性,(静态属性 和(方法)动态属性)  2.对象:也就是实例 对象名:调用对象属性           调用方法   3.什么叫抽象?     从小到大的过程  4.组合-----什么有什么的关系(将一个类的对象当做另一个类的属性)  5.继承-----什么是什么的关系       从大范围到小范围的过程       继承的作用:减少代码的重用性       子类有的方法,就用子类的。不会调用父类的方法。       如果要在子类中调用父类的方法:super().类名() 6.派生:父类没有的子类有了 派生类:在父类的基础上,又产生了子类,这个子类就叫做派生类 派生属性:父类里没有的属性但子类中有了的属性就叫做派生方法。 派生方法:父类里没有的方法但子类中有了的方法就叫做派生方法。  7.方法的重写 父类里有子类里也有的方法叫做方法的重写 二、接口类与抽象类 1.接口类:(在抽象类的基础上)     在python中,默认是没有接口类的   接口类不能被实例化(如果实例化会报错) 接口类中的方法不能被实现 1 1.正常调用 2 class Applepay: 3 def pay(self,money): 4 print('apple pay 支付了%s'

11-多态

放肆的年华 提交于 2019-11-30 02:46:37
目录 多态 概述 多态的具体情况 多态下的成员特点 成员方法 转型 向上转型 向下转型 instanceof 总结 什么时候转型 多态的好处和缺点 额外 多态 概述 例如:Student类继承了Person类,那么Student的对象,即是一个Student也是Person。 表示:可以将子类(实现类)对象赋值给该类的引用变量,也可以将子类(实现类)对象赋值给父类的引用变量。 代码的最终体现:父类的引用变量指向子类对象。 代码:Person p = new Student();//就像int x = (byte)4; 注:多态必须在继承的前体下。(普通继承,抽象类,接口) 多态的具体情况 类继承普通类 class Fu{ } class Zi{ public static void main(String[] args) { Fu fu = new Zi(); } } 类继承抽象类 abstract class Fu{ } class Zi extends Fu{ public static void main(String[] args) { Fu fu = new Zi(); } } 实现类实现接口 interface Fu { } class Zi implements Fu{ public static void main(String[] args) { Fu fu =

Java多态的实现

邮差的信 提交于 2019-11-30 02:17:53
java多态的实现 Class 文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在 Class 文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址。这个特性给 Java 带来了更强大的动态扩展能力,使得可以在类运行期间才能确定某些目标方法的直接引用,称为动态连接,也有一部分方法的符号引用在类加载阶段或第一次使用时转化为直接引用,这种转化称为静态解析。 静态解析成立的前提是:方法在程序真正执行前就有一个可确定的调用版本,并且这个方法的调用版本在运行期是不可改变的。换句话说,调用目标在编译器进行编译时就必须确定下来,这类方法的调用称为解析。 在 Java 语言中,符合"编译器可知,运行期不可变"这个要求的方法主要有静态方法和私有方法两大类,前者与类型直接关联,后者在外部不可被访问,这两种方法都不可能通过继承或别的方式重写出其他的版本,因此它们都适合在类加载阶段进行解析。 Java 虚拟机里共提供了四条方法调用字节指令,分别是: • invokestatic:调用静态方法。 • invokespecial:调用实例构造器方法、私有方法和父类方法。 • invokevirtual:调用所有的虚方法。 • invokeinterface:调用接口方法,会在运行时再确定一个实现此接口的对象。 只要能被 invokestatic 和 invokespecial

多态

随声附和 提交于 2019-11-30 01:51:00
什么是多态? 所谓多态,是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。 多态性的描述形式: 多态性严格来讲,有两种描述形式: 一、方法的多态性: ① 方法的重载:同一个方法名称,会根据传入参数的类型及个数不同执行不同的方法体; ② 方法的覆写: 同一个方法,会根据子类的不同,实现不同的功能。 二、对象的多态性(指的是发生在继承关系之中,子类和父类之间转换问题) ① 向上转型(自动完成):父类 父类对象 = 子类实例 <new 实现> ② 向下转型(强制完成):子类 子类对象 = (子类)父类实例 <new 实现> 如何记住:向上转型,向上肯定是子类实例向父类转,所以左边是父类 右边是子类实例; 向下转型,是父类向子类转,所以左边是子类,右边是父类及强制转换 三、转型的意义: ① 向上转型的真正意义在哪呢? 由于所有的子类都可以向上转型为其父类

java初学

僤鯓⒐⒋嵵緔 提交于 2019-11-30 01:35:06
java第九课 类里包括属性,方法 一个类可以有多个实例化对象 类的关系有俩种 或关系和与关系 对象之间的通信是消息机制 对象特征 封装性,继承性,多态性 继承:子类自动继承文类的属性和方法 多态:相同的操作过程可作用于多种类型的对象上并获得不同的结果 多态:不同的对象,收到同一消息可以产生不同的结果,即具有不同的表现行为。 类(class)声明类 类名第一个字母大写 语法[访问符][修饰符] class 类名{ [属性] [方法] } 创捷对象使用new关键字 类名 对象名 = new 类名(); person p = new person(); 来源: CSDN 作者: 繁华& 链接: https://blog.csdn.net/weixin_45808791/article/details/103246305

Java多态——代码示例

梦想的初衷 提交于 2019-11-30 00:38:28
---恢复内容开始--- 刚开始看多态的文字定义时,总是不明白说的啥意思,看了一些示例代码后,总算知道了,其实也就是“多态”的字面意思。 如下: class A{ public void Out() { System.out.println("This is A"); } } class B extends A{ public void Out() { System.out.println("This is B"); } } class C extends A{ public void Out() { System.out.println("This is C"); } } 上面创建了三个类,其中两个类为子类。 public static void main(String[] args) { A isA=new A(); isA.Out();//输出A A isB=new B(); isB.Out();//输出B A isC=new C(); isC.Out();//输出C } 来源: https://www.cnblogs.com/lbhym/p/11541777.html

Day03_01目标:多态的概述

左心房为你撑大大i 提交于 2019-11-29 23:30:49
目标:多态的概述 面向对象的三大特征: 封装,继承,多态。 多态的形式: ​ 父类名称 对象名称 = new 子类构造器; ​ 接口名称 对象名称 = new 实现类构造器; ​ 父类的类型范围 > 子类的类型范围。 多态的概念: ​ 相同类型的行为,在不同的状态下可以表现出不同的特征。 多态的识别技巧: ​ 对于方法的调用:编译看左边,运行看右边。 ​ 对于变量的调用:编译看左边,运行也看左边。 多态的使用前提:有三点。 ​ 1.必须有继承或者实现关系。 ​ 2.必须存在父类类型的变量引用子类类型的对象。 ​ 3.存在方法重写。 小结: ​ 记住以上语法。 public class PolymorphicDemo { public static void main ( String [ ] args ) { //父类名称 对象名称 = new 子类构造器; Animal a = new Wolf ( ) ; a . run ( ) ; // 编译看左边,运行看右边。 System . out . println ( a . name ) ; // 编译看左边,运行也看左边。 Animal a1 = new Tiger ( ) ; a1 . run ( ) ; // 编译看左边,运行看右边。 System . out . println ( a . name ) ; // //

Day03_02目标:多态的优劣势

别说谁变了你拦得住时间么 提交于 2019-11-29 23:30:38
目标:多态的优劣势 优势: ​ 1.在多态形式下,右边对象可以实现组件化切换,业务功能也随之改变, ​ 后续代码无需改变,便于扩展和维护。 ​ 2.实际开发的过程中,父类类型作为方法形式参数,传递子类对象给方法, ​ 可以传入一切子类对象进行方法的调用,更能体现出多态的扩展性与便利. 劣势: ​ 1.多态形式下,不能直接调用子类特有的功能。 小结: ​ 记住。 public class PolymorphicDemo { public static void main ( String [ ] args ) { Animal a = new Cat ( ) ; a . run ( ) ; // a.catchMouse(); // 报错了,多态形式下,不能直接调用子类特有的功能。 Animal a1 = new Cat ( ) ; go ( a1 ) ; Animal a2 = new Wolf ( ) ; go ( a2 ) ; } // 动物大赛:全部动物都可以进来。 public static void go ( Animal c ) { c . run ( ) ; } class Animal { public void run ( ) { System . out . println ( "动物可以跑~~~" ) ; } } class Cat extends

Java——面向对象

徘徊边缘 提交于 2019-11-29 23:02:36
Java——理解面向对象 一:什么是面向对象编程? 面向对象编程 ( Object Oriented Programming, OOP ,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的 单元 或对象组合而成。OOP 达到了 软件工程 的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。 面向对象是由OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)三个部分组成。其中,OOA和OOD的结构需要使用一种方式来描述并记录,目前统一采用UML(统一建模语言)来描述并记录OOA、OOD的结果。 Java语言是纯粹的面向对象的程序设计结构,这主要表现在Java的三种基本特征:继承,封装和多态。 目前主流的开发方法是:结构化开发方法和面向对象开发方法。C、Basic、Pascal等都是结构化编程语言,C++、C#、Java、Ruby等都是面向对象的编程语言。 二:程序有哪三种基本结构? 顺序结构,选择结构,循环结构。 顺序结构 :程序中的各操作是按照它们在源代码中的排列顺序依次执行的。 选择结构 :程序的处理需要根据某个特定的条件选择其中的一个分支执行。选择结构有单选择,双选择和多选择三种形式。 循环结构 :程序反复执行某个或某些操作,知道某个条件为假(或为真

《Thinking in Java》Eight 多态

牧云@^-^@ 提交于 2019-11-29 23:02:05
在OOP编程语言中,多态是继数据抽象和继承之后的第三种基本特征。 动态绑定(后期绑定/运行时绑定):在运行时根据对象的类型进行绑定。也就是编译器一直不知道对象的类型,但方法调用机制能找到正确的方法体并加以调用。draw()方法的所有调用都是通过动态绑定进行的,由随机产生几何形状可以看出,编译器事先不知道哪些对象会调用draw(),都是在运行时动态绑定的。 package Eight; import java.util.Random; class Shape{ public void draw(){ System.out.println("Shape draw"); } public void out(){ System.out.println("Shape"); } } class Circle extends Shape{ public void draw(){ System.out.println("Circle draw"); } public void out(){ System.out.println("Circle"); } } class Square extends Shape{ public void draw(){ System.out.println("Square draw"); } public void out(){ System.out.println