a- 11、多态
- 定义:某一类事物的多种存在形态多态性简单说就是一个对象对应着不同类型。
- 体现:
- 父类或者接口的引用指向或者接收自己的子类对象。
- 作用:
- 多态的存在提高了程序的扩展性和后期可维护性。
- 前提:
- 1. 需要存在继承或者实现关系。
- 2. 需要有覆盖操作。
- 好处:
- 提高了代码的扩展性,前期定义的代码可以使用后期的内容。
- 弊端:
- 前期定义的内容不能使用(调用)后期子类的特有内容。
- 多态时,成员的特点:
- 1. 成员变量
- 编译时:参考引用型变量所属的类中是否有调用的成员变量。 有,编译通过,没有,编译失败。
- 运行时:参考引用型变量所属的类中是否有调用的成员变量,并运行该所属类中的成员变量。
- 简单说:编译和运行都参考等号的左边。
- 2. 成员函数(非静态)
- 编译时:参考引用型变量所属的类中是否有调用的函数。 有,编译通过。 没有,编译失败。
- 运行时:参考的是对象所属的类中是否有调用的函数。
- 简单说:编译看左边,运行看右边。
- 3. 静态函数
- 编译时:参考的是对象所属的类中是否有调用的函数。
- 运行时:参考的是对象所属的类中是否有调用的函数。
- 简单说:编译和运行看左边。
- ————————————————————————————————————————————————————————————————————
- //多态
- public class Test {
- public static void main(String[] args) {
- Fu f = new Zi();//多台,父类引用指向子类的实例
- System.out.println("f.num = " +f.num);//多态引用的变量是父类的
- // System.out.println("((Zi)f).num = "+((Zi)f).num);//强转后,子类的变量可见
- f.method();//调用的还是子类的方法
- f.show();//静态方法调用 的父类
- f.method1();//错误,子类特有的方法,父类引用不可见
- }
- }
- class Fu{
- int num = 3;
- public void method(){
- System.out.println("Fu method");
- }
- public static void show(){
- System.out.println("Fu static show");
- }
- }
- class Zi extends Fu{
- int num = 8;
- public void method(){
- System.out.println("Zi method");
- }
- public static void show(){
- System.out.println("Zi static show");
- }
- public static void method1(){
- System.out.println("Zi method1");
- }
- }
- 输出:
- f.num = 3
- Zi method
- Fu static show
- —————————————————————————————————————————————————————
复制代码
|
|