Java面向对象(8)多态
2016-09-27 09:36
330 查看
多态
April 25, 2016 8:48 PM By DeiMo多态概述
定义:某一类事物的多种存在形态。例如:动物中的猫,狗
Cat cat = new Cat();
同时猫也是动物中的一种,也可以把猫称为动物。
Animal animal = new Cat(); 动物是猫和狗具体事物中抽取出来的父类型。 父类型引用指向了子类对象
简单说:就是一个对象对应不同类型
多态在代码中的体现:父类或者接口的引用指向其子类的对象。
多态的好处
提高了代码的扩展性,前期定义的代码可以使用后期的内容。多态的弊端
前期定义的内容不能使用(调用)后期子类的特有的特有内容多态的前提
1.必须有关系:继承or实现2.必须由覆盖。
多态注意事项
1.向上提升:Animal a = new Cat();//自动类型提升,猫对象提升了动物类型。但是特有功能无法访问
作用就是限制对特有功能的访问
2.向下转型
Cat c = (Cat)a;//向下转型的目的是为了使用子类中的特有方法 c.catchMouse();
向下转型的目的是为了使用子类中的特有方法。
3.总结:无论是向上提升还是向下转型,自始自终都是子类对象在做着类型的变化。
instanceof关键字
用于判断对象的具体类型。通常在向下转型前用于健壮性的判断public static void method(Animal a){ a.eat(); if(a instanceof Cat){ Cat c = (Cat)a; c.catchMouse(); }else if(a instanceof Dog){ Dog d = (Dog)a; d.lookHome(); }else{ ... } }
多态时成员特点
1.成员变量编译时:参考引用型变量所属的类中是否有调用的成员变量。有,编译通过,否则编译失败
运行时:参考引用型变量所属的类中是否有调用的成员变量,并运行该所属类中的成员。
总结:编译和运行都参考等号的左边。
2.成员函数(非静态)
编译时:参考引用型变量所属的类中的是否有调用的函数。有,编译通过,没有,编译失败。
运行时:参考的是对象所属的类中是否有调用的函数。
总结:编译看左边,运行看右边。
3.静态函数
编译时:参考引用型变量所属的类中的是否有调用的静态方法。
运行时:参考引用型变量所属的类中的是否有调用的静态方法。
总结:编译和运行都看左边。其实对于静态方法,是不需要对象的。直接用类名调用即可。
相关文章推荐
- 黑马程序员---java面向对象 封装, 继承, 多态
- 黑马程序员--03.Java面向对象--08.【多态中成员的特点】
- 黑马程序员_java面向对象总结【3】(继承、接口和多态)
- Java面向对象多态abstract关键字
- 黑马程序员_java基础3-面向对象(二)多态、异常、包
- 菜鸟的学习之路(3) —java 面向对象程序设计的封装、继承和多态
- Java面向对象多态注意点(随记)
- Java面向对象之多态
- 黑马程序员-JAVA面向对象之抽象、接口、多态
- Java面向对象_多态
- Java学习系列(四)Java面向对象之修饰符、封装、继承、多态详解
- Java菜鸟学习笔记--面向对象篇(十八):对象转型&多态
- java编程面向对象思想:封装,继承,多态
- java--面向对象之多态
- 黑马程序员--03.Java面向对象--07.【多态】【instanceof操作符】
- 黑马程序员--Java学习笔记之面向对象思想(多态、内部类、匿名内部类、异常类)
- Java学习系列(四)Java面向对象之修饰符、封装、继承、多态详解
- Java学习第六_八天:面向对象__继承_接口_多态
- Java学习系列(四)Java面向对象之修饰符、封装、继承、多态详解
- java面向对象-super、继承、覆盖、多态、类加载、访问控制