------- android培训、java培训、期待与您交流! --------------------------------
一、多态在生活中的体现
生活中的多态,就是一个事物,具备的多种形态
比如说,我在公司上班的时候,我就是一个打工仔
我下班了去上夜校,那我就是一个学生
我下课去买瓶水,那我就是消费者
回家了,那我就是家庭一员...
二、对象的多态性
我们可以通过一个小案例来解释
儿子继承了父亲,那父亲的资源儿子当然可以拿来用
反过来,不同儿子的财产父亲也都可以使用,这不就是多态吗?(这是向上转型)
假如还一种情况,儿子的私房钱,如果父亲要用就要和儿子商量,这就是强制对象转换也叫向下转型,然后就可以调用儿子的特殊方法(私房钱)
三、多态的前提
要实现多态,前提是需要继承
那继承和多态的区别就出来了:
继承感觉是子类调用共有的父类资源的过程是继承吗? 这是从子类到父类
从父类实现子类不同的方法过程是多态吗? 这是从父类到子类
A. 父类或者接口指向自己的子类对象
Fu f = new Zi(); 千万不要写 Zi zi = new Fu();
B. 调用方法的时候,运行的是子类重写后的方法
C. 调用成员变量的时候,运行的是父类的成员变量
D. 在多态中,只能调用子类父类共有方法,不能调用子类的特有方法!!多态的弊端
E. 调用子类特有方法,必须进行类型的强制转换,将提升为父类类型的子类对象,转回子类的类型,手动!!
F. 保证程序的安全性,避免发生类型转换异常ClassCastException,采用instancof运算符,进行健壮性判断
变量 instanceof 类名 如果是返回真 类 instanceof 变量--语法错误
四、多态中的实现的细节,很重要很重要
多态中的成员变量:
编译时期,如果父类中定义了这个成员变量,编译成功,否则编译失败
运行时期,运行父类中定义的成员变量
多态中的静态成员变量:
编译时期,如果父类中定义了这个成员变量,编译成功,否则编译失败
运行时期,运行父类中定义的成员变量
多态中的非静态成员方法:
编译时期,如果父类中定义了这个成员方法,编译成功,否则编译失败
运行时期,运行子类重写后的方法
多态中的静态成员方法:
编译时期,如果父类中定义了这个成员方法,编译成功,否则编译失败
运行时期,运行父类中定义的成员方法
小规律:
除了非静态的成员方法以外,编译运行都看父类
只有非静态的成员方法,编译看父类,运行看子类
非静态的成员方法,编译看左边,运行看右边
其他情况,编译运行全看左边
ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------- 详细请查看:www.itheima.com