黑马程序员技术交流社区
标题: 面向对象的多态问题 [打印本页]
作者: 程玉习 时间: 2014-1-2 22:14
标题: 面向对象的多态问题
面向对象的多态有几种类型啊。。。晕了,求大婶解答,越详细好!
作者: 流浪的风 时间: 2014-1-2 22:22
多态就是继承方面的理解,就是父类动态指向子类的相同方法,即子类覆盖父类的方法,这就是多态,父类的方法被覆盖了就会执行子类的方法,
作者: 诺忔。初禾、 时间: 2014-1-2 22:24
有两种,向上类型转换(子类转父类)和向下类型转换(父类转子类)
作者: 净坛使者 时间: 2014-1-2 22:32
1、 抽象类的语法: 访问修饰符 abstrac class 类名 2、 父类中的方法: 访问修饰符 abstrac 返回类型 方法(); 注意:含有抽象方法的类必然是抽象类。抽象类中的方法并不一定都是抽象方法。 抽象类是不能被实例化的。只能通过它的子类来实现该类的方法,除非它的子类也是一个抽象类。 抽象类不能是密封或者静态的,抽象类被子类继承并实现它的抽象方法。 3、重写抽象方法: 访问修饰符 override 返回类型 方法() 4、使用场合: A 父类提供了一个功能或者规定,约束子类的行为
作者: ztwztw 时间: 2014-1-3 15:03
父类或者接口的引用指向子类或者所实现对象
作者: 午夜b'Boy 时间: 2014-1-3 17:48
多态,动物 》》肉食动物》》老虎。可以理解为继承关系,这时老虎既可以用:肉食动物:来称呼他
也可以用:动物:来称呼他,即所谓的向上转型
一个对象,可以由多种 父类变量引用也是多态的一种表现
作者: 肖银 时间: 2014-1-3 18:07
这是我的学习笔记,老师讲了没多久,大家一起学习,请补充.
面向对象的多态
多太就是事物(对象)的多种表现形态
父类指向子对象
多态的好处:让程序的扩展性变的更强,不用在面对具体的子类对象
多态的弊端:只能访问父类的功能,无法使用子类特有的功能.
例:
- Class animal
- {
- Abstract void eat();
- Abstract void sleep();
- }
- Class cat()
- {
- ......
- }
- Class dog()
- {
- ......
- }
- Class test
- {
- Public static void main(String[] args)
- {
- Dog d = new dog();
- Method(d);
-
- }
- Public static void Method (animal a)
- {
- A.ect();
- A.sleep();
- }
- }
复制代码
多态中的类型转换
1.多态中的自动类型提升
Dog d = new dog();
Animal a = new dog();
引用的类型是Animal的类型,而引用所指的类型Animal的子类类型。
这时就发生了类型的自动提升。把Animal子类类型提升成了Animal类型。
这种类型的提升会导致无法使用子类特有的方法,如果想要使用子类的特有方法,必须将animal 类型再转成对应的子类型,才能去使用.
2.类型向下转型(强制类型转换)
Animal a =new dog();
Dog d = (dog)a;
把animal 类型强转成子类型.
当我们把一个子类型强制转换成其他类型(这个类型不是子类的父类)时,会发生ClassCastException异常.
ClassCastException 叫作类型转换异常.
如何避免这个异常呢?
在进行向下转型时,应该先做类型判断,当符合强转要求时,我们才进行强转,否则就不进行转换.
健壮性判断用到if关健字,判断类型是否可转
- public static void method(Animal a)
- {
- a.eat();
- //a.lookHome();编译报错,原因是这里a是Animal类型,只能使用Animal中描述的功能,而无法使用子类特有的功能
- if( a instanceof Dog )
- {
- Dog d = (Dog)a;
- d.lookHome();
- }
- a.sleep();
- }
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |