`

Java 高级特性之 instanceof

 
阅读更多

Java中的instanceof关键字

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在绝大多数情况下并不是推荐的做法,应当好好利用多态。
分享到:
评论

相关推荐

    2023java最新阿里巴巴面试题,2023java最新阿里巴巴面试题

    这些知识点覆盖了Java的基础、面向对象特性、内存管理、异常处理和并发编程等多个方面,是Java程序员应该掌握的核心技能。在阿里巴巴这样的大型企业面试中,这些知识不仅要求理解,还需要能够灵活应用和深入分析。

    《Java技术指南2019》

    高级篇则专注于Java高级特性的理解和应用,如Java反射机制、序列化、注解、JMS、JMX、泛型、单元测试、正则表达式、Java工具库、API&SPI、异常处理、时间处理、编码方式、语法糖等。进阶篇的深入学习将帮助读者在...

    Java最新面试题2023,Java八股文2023

    Java是一种广泛使用的高级编程语言,以其独特的特性和设计理念在软件开发领域占据重要地位。以下是针对Java面试题的一些关键知识点: 1. **Java语言特点** - **简单易学**:Java设计时考虑到易于理解和学习,避免...

    10万字总结java面试题和答案(八股文之二).pdf

    Java是一种广泛使用的高级编程语言,以其强大的功能和跨平台特性受到开发者们的青睐。以下是针对Java面试题的一些关键知识点的详细解析: 1. **Java语言特点**: - **简单易学**:Java设计时考虑了C++的复杂性,...

    java白皮书.zip

    这份文档对于开发者来说是一份非常重要的参考资料,它涵盖了从基础概念到高级特性的全面讲解,帮助我们理解并熟练运用Java进行软件开发。 Java语言特性: 1. **面向对象**:Java是一种面向对象的语言,支持类、接口...

    最新Java JDK 20安装版(macos-64位)

    - **Java Mission Control(JMC)**:一套高级监控和诊断工具,用于深入分析Java应用程序。 2. **macOS安装指南** - 下载`jdk-20_macos-x64_bin.dmg`文件,双击打开磁盘映像。 - 在映像内找到`.pkg`安装包,双击...

    面向对象与java程序设计期末试卷及答案

    面向对象与Java程序设计是计算机科学中的核心课程,主要涵盖了Java语言的基础概念、面向对象编程原理以及相关的编程实践...学习和理解这些知识点是成为Java程序员的基础,也是进一步深入学习Java高级特性和框架的前提。

    尚硅谷java 2019练习.zip

    面向对象编程构造器day07_高级类功能1封装、继承功能、方法重写与方法重载区别、this关键字day08_高级类特性1多态特性、4种访问权限修饰符、this与super、==与equals方法区别、instanceof操作符day09_高级类特性1...

    java笔记 java笔记

    ### Java基础知识概述 #### 1....以上是Java的基础知识和高级特性的概述。Java是一门功能强大且灵活的编程语言,适用于各种应用场景。掌握这些核心概念和技术将有助于开发者更好地利用Java来解决问题。

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

    在Java数据类型部分,《Java高分面试指南》对整型、浮点型、字符型、布尔型等基本数据类型进行了详细介绍,并在高级类型转换方面,例如Char类型转换为int、string、double等,都给出了细致的讲解和实例。 Java...

    Java入门教程:最全面最简单的Java基础教程

    Java 入门教程涵盖了从语言基础到高级特性的全方位学习内容。Java 作为一种跨平台的编程语言,其设计理念是“一次编写,到处运行”,具备广泛的应用领域,包括桌面应用程序、Web 应用后端、Android 移动开发以及...

    Java面试八股文2024最新版

    Java面试八股文是针对Java开发者准备面试时的必备复习资料,涵盖了广泛的Java技术领域,包括基础、框架、中间件、数据库、操作系统、虚拟机等多个方面。以下是对这些知识点的详细解析: ### Java基础 1. **Java语言...

    Java架构师面试总结

    - **简单易学**:Java的设计目标之一就是易于学习,其语法简洁,与C++相比更易于理解和掌握。 - **丰富的类库**:Java拥有庞大的标准类库,涵盖了网络、I/O、图形界面、数据库连接等众多功能。 - **面向对象**:...

    《Java 工程师成神之路》-- 面试 -- 程序员小灰.pdf

    反射是Java语言的重要特性之一,通过反射可以动态地创建对象、调用方法、访问属性。与反射密切相关的还有动态代理。动态代理机制可以用于实现AOP(面向切面编程),其中Spring框架的常用注解如@Autowired、@...

    Java开发详解.zip

    010404_【第4章:数组与方法】_Java新特性对数组的支持笔记.pdf 020501_【第5章:面向对象基础】_面向对象、类与对象的定义笔记.pdf 020502_【第5章:面向对象基础】_类与对象的进一步研究笔记.pdf 020503_【第5章:...

    Java思维导图

    Java编程是一种广泛使用的高级编程语言,以其跨平台性、面向对象特性和丰富的库而闻名。在深入探讨Java的思维导图之前,让我们先理解每个文件名所代表的知识点。 1. **Java知识思维导图.jpg** 这张图很可能包含了...

    Java知识表格,java ee,java web

    ### Java知识表格详解 #### 一、Java SE 基础部分 ##### 1. Java 发展及 JDK 配置 - **JAVA的发展过程**...以上内容涵盖了从Java基础到高级面向对象编程的关键知识点,旨在帮助学习者系统地掌握Java编程的核心技术。

    java jdk实列宝典 光盘源代码

    15 applet java可以编写两类程序,applications和applet,applications可以在控制台直接运行,与其他高级编程语言没有太大区别,而java的特色在于它具有编制小应用程序的功能,applet可以在internet上传输并在兼容...

    Java课程大纲

    Java课程大纲旨在全面教授Java编程语言,从基础到高级特性,涵盖了Java Standard Edition (Java SE) 的多个方面。课程分为三个阶段,每个阶段都包含了一系列关键知识点。 **第一阶段:Java SE (Part 1)** 这个阶段...

    java全集.pdf JAVA全集

    ### Java全集知识点总结 #### 一、Java的特点与运行原理 **1.1 Java特点** ...以上内容涵盖了Java的基础知识到高级特性,从基本语法到面向对象编程,再到多线程和I/O操作等,全面地介绍了Java语言的核心知识点。

Global site tag (gtag.js) - Google Analytics