`

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根据...

    Java体系最新面试题及解答(2024版)(必看266页).pdf

    如果对象与类或接口在继承或实现关系上相匹配,则返回true;否则返回false。如果对象为null,instanceof运算符也会返回false。 Java自动装箱是将基本数据类型自动转换为对应的包装类对象的过程,例如int转换为...

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

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

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

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

Global site tag (gtag.js) - Google Analytics