zoukankan      html  css  js  c++  java
  • 【Java基础】1、java中的instanceof

    instanceof是Javaphp的一个二元操作符(运算符),和==,>,<是同一类东西。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据。可以用来判断继承中的子类的实例是否为父类的实现。相当于c#中的is操作符。java中的instanceof运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。

    instanceof的使用

    一、

    比如我们写了一个处理账单的系统,其中有这样三个类:
    public class Bill {//省略细节}
    public class PhoneBill extends Bill {//省略细节}
    public class GasBill extends Bill {//省略细节}
    在处理程序里有一个方法,接受一个Bill类型的对象,计算金额。假设两种账单计算方法不同,而传入的Bill对象可能是两种中的任何一种,所以要用instanceof来判断:
    public double calculate(Bill bill) {
    if (bill instanceof PhoneBill) {
    //计算电话账单
    }
    if (bill instanceof GasBill) {
    //计算燃气账单
    }
    ...
    }
    这样就可以用一个方法处理两种子类。
    然而,这种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实现,这是面向对象编程应有的做法,避免回到结构化编程模式。只要提供两个名字和返回值都相同,接受参数类型不同的方法就可以了:
    public double calculate(PhoneBill bill) {
    //计算电话账单
    }
    public double calculate(GasBill bill) {
    //计算燃气账单
    }
    所以,使用instanceof在绝大多数情况下并不是推荐的做法,应当好好利用多态。
     
     
    二、对象类型的强制转换
    例如:
    继承关系 class Manager extends Employee
    ----------------------------------------------------------
    public void doSomething(Employee e) {
    if ( e instanceof Manager){
    Manager m = (Manager) e ;
    }
    }
  • 相关阅读:
    H264 RTP封包原理(转载)
    FFmpeg的H264编码有内存泄漏吗??!!!
    最近在研究FFmpeg编解码
    罗一迦
    健康导报
    Vivado生成edf文件
    VIVADO生成MCS
    网络变压器
    Zynq 在Ubuntu上搭建编译环境
    [转]TimeQuest之delay_fall clock_fall傻傻分不清楚
  • 原文地址:https://www.cnblogs.com/wangzhongqiu/p/6287845.html
Copyright © 2011-2022 走看看