面向对象3---多态

Posted mhy666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象3---多态相关的知识,希望对你有一定的参考价值。

第一章、多态

一、概述     

 1、概念

是面向对象的三大特性之一

多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。

2、意义:

2.1)-------行为的多态:(一个引用向下造型多个对象)

同一个行为:同一类型的引用,指向不同的(子类或者子类接口)对象时,相同的行为会有不同的实现

2.2) -------对象的多态: (一个对象向上造型多个引用)

同一个对象:被向上造型为不同的类型时,同一个对象有不同的功能

 

3、定义格式

父类类型  变量名 = new 子类类型();

变量名.方法名();

 

4、成员的特点(向上和向下转型都是这样)

l  多态成员变量

当子父类中出现同名的成员变量时,多态调用该变量时:

编译时期:参考的是引用型变量所属的类中是否有被调用的成员变量。没有,编译失败。

运行时期:也是调用引用型变量所属的类中的成员变量。

简单记:编译和运行都参考等号的左边。编译运行看左边。

l  多态成员方法

编译时期:参考引用变量所属的类,如果没有类中没有调用的方法,编译失败。

运行时期:参考引用变量所指的对象所属的类,并运行对象所属类中的成员方法。如果对象没有成员方法,则看引用的成员方法;

简而言之:编译看左边,运行看右边。如果右边没有方法,则看左边;

 

5、多态-转型

5.1向下转型(强制类型转换:父类引用--赋值--子类引用)

5.1.1成功的条件只有如下两种:

(1)定义父类引用:

必须是满足父 fu = new 子();

如果是直接创建父类对象,是无法向下转型的!

(2)转换父类的引用

父类引用转换的值,就是该类型

父类引用转换的值,该类实现的接口

5.1.2注意实现

(1)强转若不符合如上两个条件,则发生ClassCastException类型转换异常

          建议:在强转之前先使用instanceof来判断引用指向的对象是否是该类型

  5.1.3使用格式:

子类类型 变量名 = (子类类型) 父类类型的变量;

如:Student stu = (Student) p;  //变量p 实际上指向Student对象

5.1.4什么时候使用

需要使用子类特有功能(就是父类没有的功能)

 

5.2向上造型

5.2.1概念

当有子类对象赋值给一个父类引用(或者接口引用)时,便是向上转型;

5.2.2使用格式:

父类类型  变量名 = new 子类类型();

如:Person p = new Student();

 

5.2.3什么时候使用

当多个子类有相同的方法名,但是方法体不一样的时候;

父类中的方法可以是抽象方法,可以普通方法;

 

以上是关于面向对象3---多态的主要内容,如果未能解决你的问题,请参考以下文章

0面向对象三大机制 封装继承多态

0面向对象三大机制 封装继承多态

JS面向对象三大特征:封装、继承、多态

python面向对象(封装继承多态)+ 面向对象小栗子

JAVA面向对象3---多态

Java面向对象:多态特性的学习