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在绝大多数情况下并不是推荐的做法,应当好好利用多态。
[转]http://edu.yesky.com/edupxpt/253/2212253.shtml
分享到:
相关推荐
Instance of Subclass, Subclass, Instance of Superclass, Superclass,及方法直接的关系
Single Instance of an Application Class (21KB)
this a java instance about interface application
this a java instance about innerclass application
Java中new关键字和newInstance() 的区分。
java课程资料,内含5个。源码功能自助理解。
1. The name of a Java source file (a) has no restrictions (b) must be the same as the class it defines, ignoring case (c) must use the extension .class (d) must be the same as the class it defines, ...
主要介绍了Java解决No enclosing instance of type PrintListFromTailToHead is accessible问题的两种方案的相关资料,需要的朋友可以参考下
Java Virtual Machine Support for Non-Java Languages: Java SE 7 introduces a new JVM instruction that simplifies the implementation of dynamically typed programming languages on the JVM. Garbage-First...
//create an instance of BarcodeSetteings BarcodeSettings settings = new BarcodeSettings(); //set barcode type settings.setType(BarCodeType.QR_CODE); //set barcode data settings.setData("ABC...
java语言编写的组播实例,很好很强大对大家会有一定的帮助
* This static method create an instance of the ExceptionManager by invoking the * constructor <code>ExceptionManager(String msg)</code>. * * @param msg The message will pass the specified ...
JAVA游戏程序设计实例,包括基本绘图技巧,游戏中常用的贴图技术等。个人认为是游戏设计初学者不错的教程。
主要介绍了java 中newInstance()方法和new关键字的区别的相关资料,希望通过本文大家能掌握他们之家的区别与用法,需要的朋友可以参考下
// get instance of Java class java.lang.System in PHP $system = new Java( 'java.lang.System' ); $s = new Java( "java.lang.String" , "php-java-bridge config...<br><br>" ); echo $s ; // demonstrate...
this a java example,it is concernging array instance,give some different type form
Of late, neural networks and Multiple Instance Learning (MIL) are both attractive topics in the research areas related to Artificial Intelligence. Deep neural networks have achieved great successes in...
instanceVar.java 定义一个实例成员变量 invokeByObject.java 对象实参传递示例程序 invokeByValue.java 传值调用示例程序 invokeMethod.java 同一个类中调用方法示例 invokeOther.java 类的外部调用方法示例 ...
included with the 1.2.1 version of the Java 2 Platform, Enterprise Edition (J2EE), so it is still commonly used. The version of the JavaMail API you want to use affects what you download and install...