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

父类的引用指向子类对象 。

比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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值