`
smartyidiot
  • 浏览: 18262 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

JAVA函数重载及精确度匹配

 
阅读更多

最近看了一个JAVA解惑之重载的案例,感觉挺有意思的,虽然说出来大家可能明白,但有时,可能会“犯错”。

先考虑下面代码的输出:

输出结果:double array,我们来分析一下。 JAVA函数重载调用一般分为两个步骤:

1、找到所有可用的方法或构造器。 从上面的示例中,我们找到两个,参数类型分别为:double[] 和 Object

2、从1中根据参数类型选择最精确的方法或构造器进行调用。对于null我们事先并不能确定其类型,两个函数都满足条件,数组也是继承自Object所以,double[]比Object具有更高的精确度,于是输出结果就为double array。

进一步考虑:

如果调用重载函数的话,是可以通过编译的。如果调用了会编译通不过,提示:

The method printObj(double[]) is ambiguous for the type JavaPuzzles。

为什么?因为编译的时候,我们不能够确定null到底是什么类型,Number和doubl[]都继承自Object,根本无法区分,于是就出现了编译错误。

于是我们可知,在这种事先不能够明确类型的参数重载调用,只能够发生在父子或多层继承关系中,但不能发生在兄弟或者兄弟子孙间。

例如,因为String继承自Object,而Double继承自Object-->Number,所以显示调用null的时候编译会提示错误。

而因为Double继承自Number,所以调用null的时候,会调用更高精度的函数,即输入double解函数重载给我们带来了很多的方便,但是有的时候不注意,可能会带来不期望的结果,如果避免此类的问题,可以在调用的时候明确调用参数的精确类型,从而避免问题出现。如
分享到:
评论

相关推荐

    java中方法的重载.doc

    在 Java 编程语言中,方法的重载(Overloading)是一种重要的概念,它允许在一个类中定义多个同名但参数列表不同的方法。这为程序员提供了极大的灵活性,使得可以根据传入的不同参数执行不同的操作,而无需创建多个...

    08级Java实验报告题.doc

    例如,将float转换为double需要注意类型不匹配问题,因为Java不允许从double直接转换到float,可能丢失精度。标识符的命名规则规定了变量、类和方法的名称应遵循的规范。 【面向对象编程】 实验二探讨了Java的面向...

    Java基础入门习题答案.doc

    ### Java基础入门知识点详解 #### 第1章 Java 开发入门 **一、填空题解析** 1. **Java EE、Java SE、Java ME** - **Java SE(Standard Edition)**: 标准版,用于开发桌面应用程序。 - **Java EE(Enterprise ...

    Java面试宝典2017

    ### Java面试宝典2017知识点解析 #### 1. 多个类在一个源文件中的限制 在Java中,一个`.java`源文件可以包含多个类,但是必须遵守以下规则: - 源文件中只能有一个公共类(public class),且该类名必须与文件名...

    Java基础入门必备单词汇总1.0

    【Java基础入门必备单词汇总】 在Java编程语言的学习过程中,掌握一些核心的关键词和概念是至关重要的。以下是对标题和描述中所提及的一些关键单词的详细解释,它们构成了Java编程的基础: 1. **Public**: 表示...

    面向对象程序计的平台_C++与JAVA的比较

    - **扩展性**:C++ 支持单继承和多继承,提供函数重载、运算符重载等功能,增强了代码复用性和可扩展性。 **2. Java** - **起源与特性**:Java 由 Sun Microsystems 开发,是一种纯面向对象的语言,设计初衷是为了...

    Tedu一阶段的Java面试题

    ### Tedu一阶段的Java面试题详解 #### 1. JDK、JRE、JVM的区别 - **JDK (Java Development Kit)**: 这是Java的核心工具包,包含了开发Java应用所需的所有工具,如编译器(javac)、解释器(java)和其他辅助工具。JDK...

    《Java基础入门》-课后习题答案--1-6.doc

    - Java运行时环境,包含了Java虚拟机(JVM)及Java核心类库,用于运行已编译好的Java程序。 3. **javac** - Java编译器,用于将Java源代码编译成字节码(.class文件)。 4. **bin** - 包含了Java开发工具箱(JDK)...

    Java练习题

    - 在Java中,浮点数的赋值需要注意类型匹配。题目中,选项A(`float f = 11.1;`)是错误的,因为11.1是一个双精度浮点数(`double`),不能直接赋值给单精度浮点数(`float`)变量,需要转换或者使用单精度常量形式...

    详细的java基础总结

    在Java中,多态可以通过方法重载(Overloading)和方法覆盖(Overriding)实现。 #### 第五章:数组及常用算法 - **数组声明** 数组是相同类型元素的集合。声明数组的基本语法如下: ``` 数据类型[] 数组名; ...

    语言程序设计资料:Java开发必备自测练习题.doc

    4. **Java重载**:重载是指在一个类中可以有多个同名的方法,但它们的参数列表不同。这是Java的多态性表现之一。 5. **单实例类**:也称为单例模式,保证一个类只有一个实例,并提供全局访问点。通常使用`static`与...

    Java面试题整理(2022年).docx

    27. **一个.java源文件**:可以包含多个类,但只能有一个公共类,其名称应与文件名匹配。 28. **匿名内部类**:可以继承其他类或实现接口,常用于简洁的回调或事件处理器。 29. **内部类与外部类成员**:内部类...

    java内部学习笔记.docx

    9. 重载和重写:方法名相同但参数列表不同的为方法重载,子类覆盖父类方法为方法重写。 10. 继承:子类继承父类,获得父类的属性和方法。 11. static:静态修饰符,用于声明类级别的变量和方法。 12. final:常量...

    Java面试宝典2012版

    《Java面试宝典2012版》涵盖了Java面试中常见的各类问题,旨在帮助求职者深入理解Java基础知识及进阶技巧。以下是对该文档部分重要知识点的详细解析: ### Java基础部分 #### 1\. 多个类在一个.java文件中 在Java...

    Java面试宝典2011版

    《Java面试宝典2011版》涵盖了Java面试中常见的各类问题,旨在帮助求职者深入理解Java语言的核心概念及编程技巧。以下是对文件中提到的一些关键知识点的详细解析: ### 1. Java源文件中类的数量限制 在一个`.java`...

Global site tag (gtag.js) - Google Analytics