对Java instanceof的进一步理解

原创 2016年05月31日 06:31:27
instanceof是Java的一个二元操作符,和==,>,<是同一类东东。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。举个例子:
    String s = "I AM an Object!";
    boolean isObject = s instanceof Object;

我们声明了一个String对象引用,指向一个String对象,然后用instancof来测试它所指向的对象是否是Object类的一个实例,显然,这是真的,所以返回true,也就是isObject的值为True。
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在绝大多数情况下并不是推荐的做法,应当好好利用多态。
版权声明:本文为芝麻软件工作室原创文章,未经芝麻软件工作室允许不得转载。

JAVA中instanceof和getClass的应用

instanceof是Java、php的一个二元操作符(运算符),和==,>,   用法: result = object instanceof class 参数: Result:布尔...
  • Yif_zhu
  • Yif_zhu
  • 2016年01月05日 18:21
  • 420

java不同类加载器对instanceof关键字运算的影响

内容:对于任意的一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类空间。只要加载类的类加载器不同的话,那么这个两个类就必定不相等(包括...
  • u011345136
  • u011345136
  • 2015年05月18日 15:54
  • 1195

Java初学习 - instanceof的用法

package myPackage; /** * instanceof运算符用法 * 运算符是双目运算符,左面的操作元是一个对象,右面是一个类.当 * 左面的对象是右面的类创建的对象时,该运...
  • cnmilan
  • cnmilan
  • 2014年12月03日 13:43
  • 52033

ADT(抽象数据类型)的理解

比如对于栈这种数据结构,无论是顺序表的实现方式,还是基于链表的实现方式,两个类,除了类名不同之外,完全可以相互替代。...
  • lanchunhui
  • lanchunhui
  • 2016年08月01日 11:51
  • 459

你真的了解Java中的Instanceof吗?

instanceof 是一个简单的二元操作符, 它是用来判断一个对象是否是一个类实例的 boolean b1 = "Sting" instanceof Object; b1为true 因为Strin...
  • iceIcold
  • iceIcold
  • 2016年07月17日 17:29
  • 7078

instanceof和getClass()的区别

getClass() will be useful when you want to make sure your instance is NOT a subclass of the class yo...
  • u014746965
  • u014746965
  • 2015年07月16日 21:27
  • 284

浅谈对java集合的理解

首先是集合的框架图, 图片来源 Java集合是java提供的一个工具包,全部继承自java.util.*。主要包括两大接口Collection接口和Map接口以及相关的工具类(Iterator...
  • kiwi4814
  • kiwi4814
  • 2016年09月20日 21:13
  • 1206

在JAVA程序中instanceof是什么意思

instanceof是Java的一个二元操作符,和==,>,
  • YiYaYo
  • YiYaYo
  • 2007年07月10日 09:05
  • 2267

面试题-谈谈对java的认识

Java的基本认识 1、基本介绍 Java是一种跨平台的面向对象的开发语言。具有 简单性,面向对象,分布式,解释型,可靠,安全,平台无关,可移植,高性能,多线程,动态性等特点。 2、具体...
  • u011545779
  • u011545779
  • 2014年04月13日 18:39
  • 2188

C++中的"instanceof"

在C++中通过在基类、派生类复写(override)虚函数,基类指针来引用派生类对象,以达到同一个接口表现出不同的行为(即多态)的目的。反过来,我们可能存在这样的需求,仅通过一个基类指针判断它对应的是...
  • i792439187
  • i792439187
  • 2017年04月05日 11:38
  • 1105
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对Java instanceof的进一步理解
举报原因:
原因补充:

(最多只允许输入30个字)