首页 > 其他 > 详细

引用类型转换

时间:2020-10-01 10:33:53      阅读:33      评论:0      收藏:0      [点我收藏+]

引用类型转换

向上转型

  • 多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的

当父类引用指向一个子类对象时,便是向上转型。

使用格式:

父类类型    变量名 =new 子类类型();
eg:   Animal  a = new  Cat();

向下转型

  • 向下转型: 父类类型向子类类型向下转换,这个过程是强制的

使用格式:

子类类型   变量名  =(子类类型)  父类变量名;
eg:   Cat c =(Cat) a;

为什么要转型

当使用多态方式调用方法时,首先检查父类中是否有该方法, 即不能调用子类拥有而父类没有的方法,

演示

定义类

public abstract class Animal  {

    public abstract void eat();
}
class Cat extends Animal{
    public void eat(){
        System.out.println("吃鱼");
    }
    public void cacatMouse(){
        System.out.println("抓老鼠");
    }

}
class Dog extends Animal{
    public void eat(){
        System.out.println("吃骨头");
    }
    public void watchhouse(){
        System.out.println("看大门");
    }
}

测试类

   public static void main(String[] args) {
        // 向上转型
        Animal a =new Cat();
        a.eat();  // 调用的是cat的eat
        //向下转型
        Cat c =(Cat)a;
        c.cacatMouse();  // 调用的是cat的方法

        // 向上转型
        Animal b=new Dog();
        b.eat(); // 调用的是dog的eat
        //向下转型
        Dog d =(Dog) b;
        d.watchhouse();// 调用的是dog的方法

    }

转型的异常

  • 如果这两个类型没有任何的继承关系,就不符合类型转换的定义。
  • 为了避免异常的发生,java提供了instanceof关键字给引用变量做类型的校验。

接口多态的综合案例

interface USb {
    void open();
    void close();
}
// 定义鼠标类
class Mouse implements USb{
    public void open(){
        System.out.println("鼠标开启,红灯闪一闪");

    }
    public void close(){
        System.out.println("鼠标关闭,红灯熄灭");
    }
    public void click(){
        System.out.println("鼠标点击");
    }
}
// 定义键盘类:
class KeyBoard implements USb{
    public void open(){
        System.out.println("键盘开启,绿灯闪一闪");

    }
    public void close(){
        System.out.println("键盘关闭,绿灯熄灭");
    }
    public void type(){
        System.out.println("键盘打字");
    }
}


// 定义笔记本类
class Laptop{
    public void run(){
        System.out.println("笔记本运行");
    }
    public void useUSB(USb uSb){
        if (uSb !=null){
            uSb.open();
            if (uSb instanceof Mouse){
                Mouse m=(Mouse) uSb;
                m.click();
            }else if (uSb instanceof KeyBoard){
                KeyBoard kb =(KeyBoard) uSb;
                kb.type();
            }
            uSb.close();
        }
    }
    public void shutdown(){
        System.out.println("笔记本关闭");
    }
}
// 测试类

public class Test{
    public static void main(String[] args) {
        Laptop lt =new Laptop();
        lt.run();
        USb u =new Mouse();
        lt.useUSB(u);

        KeyBoard kb =new KeyBoard();

        lt.useUSB(kb);

        lt.shutdown();
    }
}

引用类型转换

原文:https://www.cnblogs.com/yuanjian-work/p/13757315.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!