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 ;
    }
    }
  • 相关阅读:
    js高级程序设计 笔记 --- 引用类型
    es6 简单封装一个 省市县三级下拉框
    js中元素、触点等各种距离的总结
    css实现视觉差的滚动
    js的节流和防抖
    js关于原型,原型链的面试题
    深入理解promise
    vue 同一个组件的跳转, 返回时保留原来的下拉位置
    es6 封装一个登录注册的验证滑块
    洛谷P3203 [HNOI2010]弹飞绵羊(lct)
  • 原文地址:https://www.cnblogs.com/wangzhongqiu/p/6287845.html
Copyright © 2011-2022 走看看