多态基础

关于java语言当中的多态语法机制:
1、Animal、Cat. Bird三个类之间的关系:
Cat继承Animal
Bird继承Animal
Cat和Bi rd之间没有任何继承关系
2、面向对象三大特征:封装、继承、多态
3、关于多态中涉及到的几个概念:
*向上转型(upcasting)
子类型-->父类型
又被称为:自动类型转换。
*向下转型(downcasting)
父类型-->子类型
又被称为:强制类型转换。[需要加强制类型转换符]
*需要记忆:
无论是向上转型还是向下转型,两种类型之间必须要有继承关系。
没有继承关系,程序是无法编译通过的。
关于java语言当中的多态语法机制:

1、Animal、Cat. Bird三个类之间的关系:
Cat继承Animal
Bi rd继承Animal
Cat和Bi rd之间没有任何继承关系
2、Cat is a Animal [合理的]
3、new Cat ()创建的对象的类型是Cat, a2这个引用的数据类型是Animal,可见它们进行了类型转换
子类型转换成父类型,称为向上转型/upcasting,或者称为自动类型转换。
4、Java中允许这种语法:父类型引用指向子类型对象。
1、java程序永远都分为编译阶段和运行阶段。
2、先分析编译阶段,再分析运行阶段,编译无法通过,根本是无法运行的。
3、编译阶段编译器检查a2这个引用的数据类型为Animal,由于Animal.class
字节码当中有move ()方法,所以编译通过了。这个过程我们成为静态绑定,编译阶段绑定。
只有静态绑定成功之后才有后续的运行。
4、在程序运行阶段,JVM堆内存当中真实创建的对象是Cat对象,那么以下程序在运行阶段
一定会调用Ca t对象的move ()方法,此时发生了程序的动态绑定,运行阶段绑定。
5、无论是Cat类有没有重写move方法,运行阶段一定调用的是Ca t对象的move方法,因为底层
真实对象就是Cat对象。
6、父类型引用指向子类型对象这种机制导致程序存在编译阶段绑定和运行阶段绑定两种不同的形态/状态,
这种机制可以成为一种多态语法机制。

1、Animal和Cat之间存在继承关系,Animal是父类, Cat是子类
2、Cat is a Animal [合理的]
3、new Cat ()创建的对象的类型是Cat, a2这个引用的数据类型是Animal,可见它们进行了类型转换
子类型转换成父类型,称为向上转型/upcasting,或者称为自动类型转换。
4、Java中允许这种语法:父类型引用指向子类型对象。
1、java程序永远都分为编译阶段和运行阶段。
2、先分析编译阶段,再分析运行阶段,编译无法通过,根本是无法运行的。
3、编译阶段编译器检查a2这个引用的数据类型为Animal,由于Animal .class
字节码当中有move ()方法,所以编译通过了。这个过程我们成为静态绑定,编译阶段绑定。
只有静态绑定成功之后才有后续的运行。
4、在程序运行阶段,JVM堆内存当中真实创建的对象是Cat对象,那么以下程序在运行阶段
一定会 调用Cat对象的move ()方法,此时发生了程序的动态绑定,运行阶段绑定。
5、无论是Cat类有没有重写move方法,运行阶段一定调用的是Cat对象的move方法,因为底层
真实对象就是Cat对象。.
6、父类型引用指向子类型对象这种机制导致程序存在编译阶段绑定和运行阶段绑定两种不同的形态/状态,
这种机制可以成为一种多态语法机制。
分析以下程序为什么不能调用?
因为编译阶段编译器检查到a2的类型是Animal类型,
从Animal. class字节码文件当中查找catchMouse ()
方法,最终没有找到该方法,导致静态绑定失败,没有绑定
成功,也就是说编译失败了。别谈运行了。

1.以上异常只有在强制类型转换的时候会发生,也就是说响下转型"存在隐患(编译过了,但是运行错了! )
2、向上转型只要编译通过,运行-定不会出问题: Animal a = new Cat()
3、向下转型编译通过,运行可能错误: Animal a3 = new Bird(); Cat c3 = (Cat)a3;
4、怎么避免向下转型出现的ClassCas tException呢?
使用ins; tanceof运算符可以避免出现以上的异常。
5、instanceof运算符怎么用?
5.1.语法格式:
(引用instanceof 数据类型名)
5.2、以上运算符的执行结果类型是布尔类型,结果可能是true/false
bug漏洞 Debug反漏洞

多态在实际开发中的作用,以下以主人喂养宠物为例说明多态的作用:
1、分析:主人喂养宠物这个场景要实现需要进行类型的抽象:
一主人[类]
一主人可以喂养宠物,所以主人有喂养的这个动作
-宠物[类]
一宠物可以吃东西,所以宠物有吃东西的这个动作
2、面向对象编程的核心:定义好类,然后将类实例化为对象,给一个环境驱使一 下, 让各个对象之间协作起来形成一个系统。
3、多态的作用是什么?
降低程序的耦合度,提高程序的扩展力。
能使用多态尽量使用多态。
父类型引用指向子类型对象。
核心:面向抽象编程,尽量不要面向具体编程。
 

你可能感兴趣的:(java,多态,多态,java)