`

instanceof 与类实例关系分析

    博客分类:
  • J2SE
阅读更多
java 代码
  1. /***********************************************************************  
  2.  * Module:  MyInstanceTest.java  
  3.  * Author:  danlley  
  4.  * Modified: 2006年7月27日 13:11:21  
  5.  * Purpose: Defines the class MyInstanceTest  
  6.  ***********************************************************************/  
  7.   
  8. interface MyInterface{}   
  9.   
  10. public class MyInstanceTest implements MyInterface{   
  11.         static String s;   
  12.         public static void main(String args[]){   
  13.                 MyInstanceTest t = new MyInstanceTest();   
  14.                 if(t instanceof MyInterface){   
  15.                         System.out.println("I am true interface");   
  16.                 }else {   
  17.                         System.out.println("I am false interface");   
  18.                 }   
  19.                 if(s instanceof String){   
  20.                         System.out.println("I am true String");   
  21.                 }else {   
  22.                         System.out.println("I am false String");   
  23.                 }   
  24.         }   
  25. }   
  26.   

首先说明 instanceof 操作符,由于Java语言自身继承方式的特点,决定了你
可以将子类实例传给一个父类对象,举例来说,

java 代码
  1. Collection myCollection=new ArrayList();  

以上这行代码就是将子类的实例传给父类的对象。我们可以做一个测试:

java 代码
  1. Collection myCollection=new ArrayList();   
  2. boolean isCollection=(myCollection instanceof Collection);   
  3. boolean isArrayList=(myCollection instanceof ArrayList);   
  4. System.out.println("isCollection : "+isCollection);   
  5. System.out.println("isArrayList : "+isArrayList);  

 

这时,你可以看到,这两个输出结果都是“true”。接下来在对MyInstanceTest
类进行分析,首先第一个条件判断中打出的信息毫无疑问如下:

I am true interface

但是对于第二个判断语句来说,尽管静态变量“s”的类型是String,但是对于“S”
来说,它并没有获得String类型的实例,因此,打印的信息如下:

I am false String

我们对程序作一些小小的修改:将“S”的申明变为:

java 代码
  1. static String s=new String();  

 

这时,你自然就得到了预期的执行结果:

I am true String


分享到:
评论

相关推荐

    JavaScript的instanceof有bug?

    在JavaScript中,`instanceof`操作符用于检测一个对象是否属于某个类的实例。这个操作符在日常开发中被广泛使用,但有时它可能会表现出一些意外的行为,这可能被误认为是“bug”。本文将深入探讨`instanceof`的工作...

    java编程基础,应用与实例

    第2章 理解对象与类 9 2.1 什么是对象 9 2.2 什么是类 9 2.3 HelloJava示例的分析 11 2.4 巩固练习 12 第3章 Java语言的基本语法 13 3.1 代码编写规则 13 3.2 注释 13 3.3 标识符 14 3.4 变量和...

    php中instanceof 与 is_a()区别分析

    在这个例子中,第三个参数`true`表示我们需要检查`$obj`是否是一个已经实例化的`A`类的对象,而不是仅仅检查类的继承关系。 考虑到现代PHP环境通常都在PHP 5.0以上,推荐使用`instanceof`,因为它提供了更直接的...

    理解Javascript_07_理解instanceof实现原理

    9. 使用场景和注意事项:instanceof操作符适用于检测对象是否属于特定类的实例,但当涉及到跨iframe环境时,可能会出现检测不准确的情况,因为不同iframe有自己的全局对象,它们之间的原型链并不互通。 10. 性能...

    js代码-instanceof的实现

    通过阅读和分析`main.js`中的代码,我们可以更深入地理解`instanceof`的实际使用场景,以及它在处理对象和类之间的关系时如何发挥作用。在实际编程中,熟练掌握`instanceof`的用法能够帮助我们编写出更加健壮和可...

    Instance of Subclass, Subclass, Instance of Superclass, Superclass,

    实际代码的分析可能会包括类的定义、方法的重写、继承链的处理等方面。 总结来说,"Instance of Subclass" 和 "Instance of Superclass" 是面向对象编程中的关键概念,反映了类和对象的层次结构。通过继承,子类...

    对象转换和instanceof操作符.pptx

    对象转换涉及到类之间的继承关系,而`instanceof`则用于判断一个对象是否属于某个特定的类或者其子类。 首先,我们要理解父类型与子类型的关系。在Java中,如果类`Student`是类`Person`的子类,那么`Student`继承了...

    js代码-手写instanceof

    总的来说,手写 `instanceof` 能帮助开发者更好地理解JavaScript中的原型链和实例关系,这对于进行类型检查和优化代码性能都是十分有益的。同时,自定义的实现也有助于在某些特殊场景下提供更加灵活的解决方案。

    UML Notion Guide

    多重性描述了关联中一个类的实例与另一个类的实例的数量关系。 - **定义**:描述数量关系。 - **用途**:用于表示关联强度。 - **特点**: - 可以是零到多个。 - 用于控制关联的语义。 ##### Qualifier(限定符...

    JavaScript实现的浮动层框架用法实例分析

    `su`方法用于调用父类的方法,`get_class`返回当前实例的类,`same_instanceof`和`is_instanceof`检查类之间的关系,`trace`和`out`用于调试输出。 实例化一个浮动层框架的类,可以这样操作: ```javascript var ...

    javaSE代码实例

    15.1.5 内部类与外部类的预定义对象引用this 327 15.2 局部内部类 328 15.2.1 局部内部类的定义及创建 328 15.2.2 局部变量与局部内部类 329 15.2.3 静态方法中的局部内部类 331 15.3 静态内部类 332 ...

    JAVA经典教材笔记

    - 类与对象的关系:类是对象的模板,对象是类的具体实例。 - **类与对象的进一步研究** - 类的设计原则:单一职责原则、开闭原则等。 - 对象的创建与使用:new关键字创建对象。 - **封装性** - 封装的目的:隐藏...

    JavaScript对象拷贝与赋值操作实例分析

    创建Rectangle的实例后,它既是一个Rectangle的实例也是一个Shape的实例,这从instanceof的判断结果可以看出。 JavaScript中的对象拷贝主要分为浅拷贝和深拷贝。浅拷贝指的是只复制对象的第一层属性值,如果属性值...

    JS常见构造模式实例对比分析

    它通过创建一个新作用域,并在其中创建对象,返回的对象与原始构造函数之间没有任何关系。 总结来说,选择哪种构造模式取决于具体需求。工厂模式适用于创建大量相似但无特定类型标识的对象,构造函数模式适合创建有...

    “java高分面试指南”-25分类227页1000+题50w+字解析.pdf

    类与对象的关系是Java编程中的核心概念,从对象的创建到类的设计原则,以及如何正确使用类与对象的实例化过程,都是面试中的常见话题。掌握好类与对象的定义、使用和区别,能够表现出求职者扎实的编程基础。 在Java...

    JavaScript中继承用法实例分析

    使用`instanceof`操作符来检查`student`实例是否继承自`Person`或`Student`类。 ```javascript alert(student instanceof Person); // true alert(student instanceof Student); // true ``` ### 总结 在本文中,...

    Java开发技术大全 电子版

    9.5使用关键字instanceof判断所属类292 9.6利用反射获取运行时类信息293 9.6.1使用isInstance()方法判断所属类294 9.6.2获取成员方法信息295 9.6.3获取构造方法信息296 9.6.4获取类的成员属性297 9.6.5根据...

    php网络开发完全手册

    5.6.2 实例类型的判断方法instanceof 78 5.6.3 对象的克隆 78 5.7 一些设计观念 80 5.7.1 策略模式(Strategy Pattern) 81 5.7.2 单例模式(Singleton Pattern) 81 5.7.3 工厂模式(Factory Pattern) 83 5.8 接口...

    Java 开发人员调度软件项目 (java基础编程总结项目)+javaBean+测试代码+数组知识+数据结构+继承+.pdf

    - `instanceof` 用于判断一个对象是否是特定类或其子类的实例。 8. **接口与实现**: - 在实际项目中,可能会定义接口(如 `Runnable` 或自定义接口),并让类去实现这些接口,以定义行为规范。 9. **多态**: ...

    javascript设计模式 – 组合模式原理与应用实例分析

    这种模式的核心思想是“部分-整体”的关系,使得客户端代码能够一致地处理简单对象和复杂对象。 组合模式的定义包括两个关键点: 1. **树形结构**:组合模式中的对象构成了一种树形结构,每个对象既可以是叶子节点...

Global site tag (gtag.js) - Google Analytics