74、多态性(129)

来源:互联网 发布:多得美工学院b段班 编辑:程序博客网 时间:2024/06/05 14:52

1、多态性的概念

2、多态性的两种情况

3、对象的多态性

4、多态性小结

掌握多态性的程度就可以看出对面向对象掌握的多少

 

1、多态性的概念

1、多态是面向对象三大特性之一

2、什么是多态性

 

 

三大特性:封装、继承、多态

面向对象四大特征:封装、继承、多态、抽象

 

多态:多种形态

 

2、多态性的两种情况

1、多态性我们大概可以分为两类

(1)方法的重载与重写

(2)对象的多态性

 

方法重载:同一类中同返回值同方法名参数列表不同

方法重写:子类继承的方法,且方法体不同

 

3、对象的多态性

对象的多态性是从继承关系中的继承多个类而来

 

向上转型:将子类实例转为父类实例

格式:父类  父类对象=子类实例; →自动转换

以基本数据类型操作为例:int i=’a’;

(因为char的容量比int小,所以可以自动完成,char两个字节,int四个字节)

 

子类的实例在堆内存中,而声明的父类对象则是在栈内存中,这里就是让父类声明的对象指向子类的实例,在栈内存中储存的地址就是子类的实例在堆内存中的地址

 

切记抽象类里的抽象方法一定要加abstract,而接口中一切皆默认为抽象,可不以加。

 

具体的实现中如何体现多态的概念了,把类(类型)看做什么了?

八种基本类型

引用类型(自定义类型、类库中已经定义好的类)

 

小瓶水往大瓶装没问题,大瓶水往小瓶装可能就装不小,强制转换可能发生精度溢出就类似于小瓶装不下水漏了出来

 

小变大自动转换

大变小强制转换

 

父类是大的,因为它越抽象表现的东西越多

 

Man extends Person

按照口语上来理解记忆

Man是Person,继承什么就是什么喔!

Person是Man就没不行,没这个说法。

 

两种运用例子(向上转型)

1、狼装成羊,将父类中的狼方法在继承的子类中覆写为羊方法,这样用上转对象调用方法时,就是狼类型调用了羊方法,也就是狼装成了羊。

 

子类覆盖了父类的方法,运行时看new谁的对象,new谁的对象调用谁的方法

 

2、Person这个类型,有两个子类Women、 Man,new两个子类的对象时,就有两种不同的形态。每一种形态里都有不同的方法和属性。   也就是面向对象编程思想中,对象的不同行为和特征

 

向下转型:将父类实例转换为子类实例

格式:子类  子类对象=(子类)父类实例; 强制转换

以基本数据类型操作为例:char c=(char)97;

因为整型是4个字节比char2个字节要大,所以需要强制完成

 

java.lang.ClassCastException   类型转换异常

没有父子关系的两种类型不能强制转化哦

可以编译,但是运行时会出现异常

编程思想:人是父类,男人是人,女人是人,但男女之间不能强制转换

 

 

4、多态性小结

1、方法的重载重写就是方法的多态性表现

2、多个子类就是父类中的多种形态

3、父类引用可以指向子类对象,自动转换(隔几代也行,爷爷都行)

4、子类对象指向父类引用需要强制转换(注意:类型不对会报异常)

5、在实际开发中尽量使用父类引用更利于扩展:面向接口编程,面向抽象类编程)

 

原创粉丝点击