IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java中向上转型和向下转型 -> 正文阅读

[Java知识库]java中向上转型和向下转型

1、对象的向上转型与向下转型

  • 向上转型

    对象的向上转型就是多态的写法:

    格式: 父类名称 对象名 = new 子类名称();

    含义:右侧创建一个子类对象,把他当做父类来看待,比如:创建了一只猫,当做动物来看待。

    注意:向上转型一定是安全的,从小范围转到大范围,

    类似于:自动类型转化;

    代码 实现:

    package Interface.demo6;
    
    /*
    * 动物类
    *
    * */
    public abstract class Animal {
    
        public abstract void eat();
    }
    
    
    package Interface.demo6;
    
    /*
    * 猫类。继承Animal类
    * 并重写了父类中的方法
    * */
    public class Cat extends Animal {
        @Override
        public void eat() {
            System.out.println("猫吃鱼");
        }
    }
    
    
    package Interface.demo6;
    
    /*
    * 测试类
    * */
    public class Demo01Main {
    
        public static void main(String[] args) {
    
            //父类对象指向子类对象的引用
            Animal animal = new Cat();
            animal.eat();
        }
    }
    
    
  • 向下转型

    作用:实例化的类向上转型后,如果想访问子类的成员方法或成员变量,就会无法访问,通过向下转型后,就可以访问。

    对象的向下转型其实就是一个还原动作

    格式:子类的名称 对象名 = (子类名称)父类对象;

    含义:将父类对象 【还原】成本类的子类对象。

    Animal animal = new Cat(); //本来是猫,向上转型为动物,

    Cat cat = (Cat) animal; //本来是猫,向上转型为动物,还原回来成为本来的猫,

    注意:

    1. 必须保证对象创建是,与还原是的类型是一致的,例如:猫还原为猫,够还原为狗
    2. 如果对象创建时候本来不是猫,现在非要还原为猫,就会报运行时错误:ClassCastException,表示:类型转化错误。

    类似于:基本数据类型的强制类型转化

    package Interface.demo6;
    
    /*
    * 动物类
    *
    * */
    public abstract class Animal {
    
        public abstract void eat();
    }
    
    
    package Interface.demo6;
    
    /*
    * 猫类。继承Animal类
    * 并重写了父类中的方法
    * */
    public class Cat extends Animal {
        @Override
        public void eat() {
            System.out.println("猫吃鱼");
        }
    
        public void catchMouse(){
            System.out.println("猫抓老鼠");
        }
    }
    
    
    package Interface.demo6;
    
    /*
    * 测试类
    * */
    public class Demo01Main {
    
        public static void main(String[] args) {
    
            //父类对象指向子类对象的引用
            Animal animal = new Cat();
            animal.eat();
    
            //向下转型,将animal类转化为猫类
            Cat cat = (Cat) animal;
            cat.catchMouse();
        }
    }
    
    

    猫吃鱼
    猫抓老鼠

2、instanceof方法

instanceof可以判断引用类型的变量是否属于这个类型

package Interface.demo6;

/*
* 测试类
* */
public class Demo01Main {

    public static void main(String[] args) {

        //父类对象指向子类对象的引用
        Animal animal = new Cat();
        animal.eat();

        //向下转型,将animal类转化为猫类
//        Cat cat = (Cat) animal;
//        cat.catchMouse();
    }

    public static void getAnPet(Animal animal){
        if(animal instanceof Cat){
            //向下转型
            Cat cat = (Cat) animal;
            cat.catchMouse();
        }else {
            System.out.println("没有其他类");
        }
    }
}

记住:instanceof 在向下转型是判断要转的这个类属于那个类,这个类与他的向上转型的类一致

3、笔记本usb接口案例

cGCLc9.png

package Interface.demo7;

/*
* 笔记本类
* */
public class Computer {

    //打开电脑
    public void powerOn(){
        System.out.println("打开电脑");
    }

    public void powerOff(){
        System.out.println("关闭电脑");
    }

    public void useDrivce(Usb usb){
        //打开设备
        usb.open();

        //使用向下转型
        if (usb instanceof Mouse) {
            Mouse mouse = (Mouse) usb;
            mouse.type();
        }else if (usb instanceof Keyboard){
            Keyboard keyboard = (Keyboard) usb;
            keyboard.type();
        }

        //关闭设备
        usb.close();
    }
}

package Interface.demo7;

/*
* usb接口
* */
public interface Usb {

    //打开设备
    public abstract void open();

    //关闭设备
    public abstract void close();
}

package Interface.demo7;


/*
* 鼠标类
* */
public class Mouse implements Usb {

    //使用鼠标的方法
    @Override
    public void open() {
        System.out.println("打开鼠标");
    }

    @Override
    public void close() {
        System.out.println("关闭鼠标");
    }

    public void type(){
        System.out.println("鼠标点击");
    }
}

package Interface.demo7;


/*
* 键盘类
* */
public class Keyboard implements Usb {

    //使用键盘的方法
    @Override
    public void open() {
        System.out.println("打开键盘");
    }

    @Override
    public void close() {
        System.out.println("关闭键盘");
    }

    public void type(){
        System.out.println("键盘输入");
    }
}

package Interface.demo7;

/*
* 测试类
* */
public class demoMain {

    public static void main(String[] args) {

        //创建一个电脑
        Computer computer = new Computer();
        //打开电脑
        computer.powerOn();

        //创建一个鼠标
        Usb mouseUsb = new Mouse();
        computer.useDrivce(mouseUsb);

        //创建一个键盘
        Usb keyBoardUsb = new Keyboard();
        computer.useDrivce(keyBoardUsb);


        //关闭电脑
        computer.powerOff();
    }
}

打开电脑
打开鼠标
鼠标点击
关闭鼠标
打开键盘
键盘输入
关闭键盘
关闭电脑

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-04 12:43:31  更:2021-10-04 12:45:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:15:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码