java多态使用、向上转型、向下转型

来源:互联网 发布:netbsd 知乎 编辑:程序博客网 时间:2024/05/17 22:31
父类的引用指向子类对象 。

比father类,son类继承father类,

father f = new son();//向上转型

son s = (son) f;//向下转型

 父类的引用f指向子类对象sun()的就属于多态,

多态性是允许你将父对象设置成为一个或更多的他的子对象

多态可以节省开发和维护时间,避免了大量代码重复的使用,因为不需要再子类中重复定义执行相同功能的方法。

如果子类有覆写父类的方法,实际上调用的是子类的方法,重写是Java实现多态技术的重要方法。

Example1:

</pre><div style="text-align: justify;"></div></p><pre name="code" class="java">public class father {    public static  void main(String agrs[]){        father f = new father();        f.draw(new son1());//向上转型 多态的使用        f.draw(new son2());    }    public void draw(father f){  //方法中使用父类作为参数类型          //具体实现    }}class son1 extends father{    son1(){        System.out.println("son1子类");    }}class son2 extends father{    son2(){        System.out.println("son2子类");    }}

Example2:
/** * Created by cuboo on 2016/10/12. */public class fathers {    public static  void main(String agrs[]){        //向上转型 调用子类相同方法(重写、方法一样) 多态的使用        father f = new son1();        f.draw();        //向下转型 调用父类及子类所有方法        son1 s1 = (son1) f;        s1.draw();        s1.draw1();        s1.s();        //向上转型 调用子类相同方法(重写、方法一样) 多态的使用        father f1 = new son2();        f1.draw();        //向下转型 调用父类及子类所有方法        son2 s2 = (son2) f1;        s2.draw();        s2.draw2();        s2.s();    }}class father {    public void draw(){  //方法中使用父类作为参数类型        System.out.println("father draw");    }    void s(){        System.out.println("father s");    }}class son1 extends father{    son1(){        System.out.println("son1子类");    }    //与复类方法名相同    public void draw() {        System.out.println("son1 draw");    }    public void draw1() {        System.out.println("son1 draw1");    }}class son2 extends father{    son2(){        System.out.println("son2子类");    }    //重写父类方法    @Override    public void draw() {        System.out.println("son2 draw");    }    public void draw2() {        System.out.println("son2 draw2");    }}

Example3:
/** * Created by cuboo on 2016/10/12. */public class fathers {    public static  void main(String agrs[]){        //向上转型 调用子类相同方法(重写、方法一样) 多态的使用        father f = new son1();        f.draw();               //向下转型 调用父类及子类所有方法        son1 s1 = (son1) f;        s1.draw();                //向上转型 调用子子类相同方法(重写、方法名一样) 多态的使用        f = new gson();        f.draw();                //向上转型 调用子类相同方法(重写、方法一样) 多态的使用        father f1 = new son2();        f1.draw();        //向下转型 调用父类及子类所有方法        son2 s2 = (son2) f1;        s2.draw();    }}interface father {    public void draw();}class son1 implements father{    @Override    public void draw() {        //具体实现        System.out.println("son1的draw");    }}class son2 implements father{    @Override    public void draw() {        //具体实现        System.out.println("son2的draw");    }}class gson extends son1{    @Override    public void draw() {        System.out.println("gson的draw");    }}


0 0
原创粉丝点击