1.多态指一个方法只能有一个名称,但可以有许多形态,也就是程序中可以定义多个同名的方法,“一个接口,多个方法”,可以通过方法的参数和类型引用实现。
简单地说:同样的消息被不同的对象接收时所导致不同的行为。
- 什么是多态?why要多态?有何优点?
多态性是对象根据实际情况自动调用不同类层次上适当的同名方法的一种现象。无论什么时候,创建有层析关系的一些类时,若这些类有可能共享一个方法声明,就应当考虑分别在每个类型中实现不同的方法,在超类中,使用抽象(或普通)的方法,然后在子类中实现(或覆盖)该方法,这样就能产生多态性。多态性能使我们很容易在从超类中继承来的新类上添加新的功能。
2.多态实现条件:
- 继承和方法重写
- 子类对象声明超类类型 如:public class Employee extends Object {……}
public Manager extends Employee {……}
则Employee e = new Manager(); 合法!
- 运行类型识别
对于重写的方法,Java 运行时系统根据调用该方法的实例类型来决定选择哪个方法调用。
即若Employee 和Manager 中有同名函数,e.方法();则调用manager中的方法。
因Java在程序运行时将检查对象的真正类型,而不是仅根据编译时对象声明的类型来调用方法。
3. java中instanceof()判断某对象是否属于某个类型。
package duotai; public class Employee extends Object{ public void fun(){ System.out.println("this is Emplouyee's function!"); } }
package duotai; public class Manager extends Employee{ public void fun(){ System.out.println("this is Manager's function!"); } }
package duotai; public class main { public static void main(String []args){ Employee e = new Manager(); e.fun(); System.out.println(e instanceof Manager); System.out.println(e instanceof Employee); System.out.println(e instanceof Object); Employee unknown = new Employee(); unknown.fun(); System.out.println(unknown instanceof Manager); System.out.println(unknown instanceof Employee); System.out.println(unknown instanceof Object); } }
结果:
this is Manager's function!
true
true
true
this is Emplouyee's function!
false
true
true