这是我的学习笔记,老师讲了没多久,大家一起学习,请补充.
面向对象的多态 多太就是事物(对象)的多种表现形态 父类指向子对象 多态的好处:让程序的扩展性变的更强,不用在面对具体的子类对象 多态的弊端:只能访问父类的功能,无法使用子类特有的功能. 例: - 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();
- }
复制代码
|