黑马程序员---Java基础学习之面向对象的多态问题
来源:互联网 发布:js实例经典 编辑:程序博客网 时间:2024/05/20 18:49
这是我的学习笔记,老师讲了没多久,大家一起学习,请补充.
面向对象的多态
多太就是事物(对象)的多种表现形态
父类指向子对象
多态的好处:让程序的扩展性变的更强,不用在面对具体的子类对象
多态的弊端:只能访问父类的功能,无法使用子类特有的功能.
例:
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子类类型提升成了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(); }
0 0
- 黑马程序员---Java基础学习之面向对象的多态问题
- 黑马程序员---Java基础学习之面向对象的值传递和引用传递
- 黑马程序员-java学习基础04-面向对象之继续
- 黑马程序员—Java基础学习笔记之面向对象
- 【黑马程序员】Java学习笔记之面向对象基础篇
- 黑马程序员-java基础 面向对象的多态
- 黑马程序员----JAVA基础之面向对象
- 黑马程序员----java基础之面向对象
- 黑马程序员----Java基础之面向对象
- 黑马程序员--JAVA基础之面向对象
- 黑马程序员-JAVA基础之面向对象
- 黑马程序员----java基础之面向对象
- 黑马程序员----java基础之面向对象
- 黑马程序员-JAVA基础之面向对象
- 黑马程序员 Java基础之面向对象
- 黑马程序员-java学习之面向对象
- 黑马程序员--java面向对象
- 黑马程序员-java基础学习03-面向对象基础
- 十八 C 中的 mktime stime
- 用jsp编写九九乘法表
- VC++6.0创建一个含gdiplus的Win32 Static Library工程编译时报错解决办法
- 根据符号的地址从elf文件中查找其符号名
- Python学习2:文件操作
- 黑马程序员---Java基础学习之面向对象的多态问题
- 十九 struct tm 和 time_t 时间和日期的使用方法
- HDOJ P2544 最短路 最短路各种算法演练
- 梵蒂冈的风格的风格
- 设计模式实战应用之三:装饰者模式
- C#使用Tesseract OCR 解析验证码
- Oracle 11g 客户端连接
- 二十 关于gmtime、gmtime_r、localtime、localtime_r
- Linux基本配置和管理 9 ---- ubuntu下安装配置jdk