java中多态的详解

来源:互联网 发布:黄鹤tv 武汉网络电视 编辑:程序博客网 时间:2024/06/01 10:38

java中的多态分为两种

1方法的多态(严格意义上这不算,但为了帮助新手理解多态,此处归为多态)

方法的多态体现为,同一个类中有同名的方法,但是方法的参数类型,或参数个数不同,在实际调用的时候,会根据参数类型或参数个数找到对应的方法,这其实就是java方法的重载。

2引用多态

(1)多态的前提

        A 要有继承关系

        B要有方法重写

        C要有父类引用指向子类

      多态的代码体现

  class Fu{       public int age = 35;       public void show(){         System.out.println('fu');       }               public static void run(){        System.out.println('我跑的快');       }            }      class Zi extends Fu{  // 继承       public int age = 10;       public void show(){  // 方法重写        System.out.println('zi');       }              public static void run(){        System.out.println('我跑的慢')       }      }      Fu f = new Zi();   // 父类引用指向子类

小插曲:

虽然Fu类的静态方法  run()  只能被Zi类的静态方法 run() 重写,但这实际上根本不叫重写,子类的静态方法,不会覆盖父类的静态方法,因为静态方法是属于类的,而不是属于对象的。

 

(2) 多态中的成员访问特点

编写一个测试demo

class testDemo{  public static void main(String[] args){    Fu f = new Zi();System.out.println(f.age);System.out.println(f.show());System.out.println(f.run());  }}



以上代码运行之后依次会输出  35   zi   我跑的快

如果用指向父类的引用  f  访问了 Fu 类中没有的 成员变量  成员方法  静态方法  在编译阶段 都将报错

而我们发现,父类的成员方法在被子类重写之后,虽然  f 是指向 Fu 类的引用,但是访问的却是 Zi 类

中对应的 show() 方法,所以总结如下:

 Fu f        =    new Zi();  //左(Fu)         右(Zi) 


 成员变量:

 编译看左边,访问看左边

 构造方法:

 创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化

 成员方法:

 编译看左边,访问看右边(若子类对父类的方法进行重写,则会把父类中对应的方法覆盖,会访问到子类的方法)

 静态方法:

 编译看左边,访问看左边


1 0
原创粉丝点击