`
javawebsoa
  • 浏览: 409414 次
社区版块
存档分类
最新评论

Java学习笔记(方法重载)

阅读更多
static void f3(short x) { prt("f3(short)"); }
 static void f3(int x) { prt("f3(int)"); }
 static void f3(long x) { prt("f3(long)"); }
 static void f3(float x) { prt("f3(float)"); }
 static void f3(double x) { prt("f3(double)");}
 static void prt(String s) {
   System.out.println(s);
 }


方法的重载(有的翻译成过载)就是方法名相同,方法的参数序列不相同(这里不是指继承关系中的重写):
1)仅仅是返回类型不同,不能重载;这在一般编程语言中都是这样规定的,原因非常简单,根据返回类型确定要调用那个方法,
需要根据返回值的接受者类型来确定,这在很多时候都是非常困难的(例如接受类型是Object,或者不需要接收返回值的情况)。
2)参数序列的不同主要是指参数类型序列的不同,而不是参数名字的不同;
3)在确定参数类型不同时,不会考虑继承关系,虽然ClassA是ClassB的父类,下面:
public String DoSomething(ClassA A)和public String DoSomething(ClassB B)是符合重载的.

对于重载需要注意以下:
1)对于主类型(基本类型)重载,如果调用时实参是变量或者指定了类型的常数(2.0d),或者常数的类型唯一确定(字符,字符串,布尔),
则根据变量类型来选择要调用的方法,但对于实参是常数,不易确定的数字类型,在没有明确类型标记的情况下,一般整数会转换成int型,
一般小数会被转换成double,测试如下:

//调用测试:

char a='A';
  f3(a);
  f3(1);
  //f3(10000000000);出错
  f3(10000000000l);
  f3(2.0);
  f3(2.0f);
  f3(2.0d);


测试结果:

f3(int)
f3(int)
f3(long)
f3(double)
f3(float)
f3(double)
2)对于有继承关系的类型形成的重载,调用的时候也是根据变量类型来确定调用方法的,只不过,如果当前变量类型没有,则寻着父类型方向
向上寻找,直到找到为止(肯定会找到,如果找不到编译的时候就会报错):

下面的MyClassA->D依次为父子关系,下面是重载方法:

public class OverloadClass {
	public void DoSomething(MyClassA a)
	{
		System.out.println("MyClassA a:"+a.getClass().getName());
	}
    public void DoSomething(MyClassB b)
    {
    	System.out.println("MyClassB b:"+b.getClass().getName());
    }
    public void DoSomething2(MyClassA a)
    {
    	System.out.println("MyClassA a:"+a.getClass().getName());
    }
    public void DoSomething2(MyClassC c)
    {
    	System.out.println("MyClassC c:"+c.getClass().getName());
    }
    public void DoSomething3(MyClassC c)
    {
    	System.out.println("MyClassC c:"+c.getClass().getName());
    }
}

重载测试代码:

OverloadClass theOC = new OverloadClass();
  MyClassA theA = new MyClassA();
  MyClassB theB = new MyClassB();
  MyClassA theC = new MyClassC();
  MyClassB theD = new MyClassC();
  MyClassC theE = new MyClassD();
  MyClassD theF = new MyClassD();
  
  //theOC.DoSomething(theA);
  //theOC.DoSomething(theB);
  //theOC.DoSomething(theC);
  
  theOC.DoSomething2(theA);
  theOC.DoSomething2(theB);
  theOC.DoSomething2(theC);
  theOC.DoSomething2(theD);
  theOC.DoSomething2(theE);
  theOC.DoSomething2(theF);
  
  //theOC.DoSomething3(theA);//编译错误.

这种重载判断规则,同样也适用于C#.之所以重载是根据变量类型而不是实际类型来判断,其实原因非常简单,因为重载是在编译期就
会确定的,这个时候变量类型也是确定的,因此比较好判断,而实际类型往往是在运行期间才知道,编译期的重载当然不可能根据运行期
的事情来确定(这也是强类型语言的一个优势和劣势)。
PS:构造函数也可以重载。注意如果在构造函数中调用另外一个构造函数一定要放在构造函数的第1行,且只能调用一次。这个规定在C#中
也是一样,只是书写语法不一样。

分享到:
评论

相关推荐

    java学习笔记 继承 重载 覆盖

    java相关知识的学习笔记,个人整理,里面涵盖:继承,接口,重载,覆盖,final等等的知识点

    瑜琅java学习笔记

    1 java起源 2 java语言概述 3 简单(基本)数据类型 4 运算符:java有四大类运算符:算数运算、位运算、关系运算和逻辑运算 5 程序控制语句 6 介绍类:类是java的核心和本质 7 深入方法和类:方法重载、参数传递和递归...

    java学习笔记 初学者必读

    6.9. 方法的重载 6-15 7. 六•高级语言特性 7-15 7.1. 封装 (encapsulation) 7-15 7.2. 继承 (inherit) 7-16 7.2.1. JAVA继承特点 7-16 7.2.2. 父类(SuperClass)和 子类(SubClass)的关系 7-17 7.2.3. 系统构造一...

    java学习笔记-java思维导图流程图表格整理

    Java学习笔记 1 命令行运行 1 Java基础 1 注释 1 单行注释 1 多行注释 1 文档注释 1 标识符和关键字 2 数据类型 4 类型转换 7 变量 9 基本运算符 10 包机制 12 Javadoc 12 使用命令行生成 12 使用idea生成 12 Java...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

     《java jdk 7学习笔记》适合java的初中级读者,以及广大java应用开发人员。 作译者 林信良(网名:良葛格) 学历:台湾大学电机工程学系 经历:台湾升阳教育训练技术顾问、专业讲师,oracle授权训练中心讲师 ...

    JAVA学习笔记.docx

    1. 开发环境Eclipse软件的下载与配置 2. JAVA的基础知识 3. JAVA面向对象编程 (1) 编写类的步骤 (2) 对象的创建及访问对象中的... (3) 构造方法与重载 4. This关键字 5. Static关键字 6. 继承、重写、多态等相关笔记

    java学习笔记

    方法的重载 overloading 方法名相同,参数表不同(个数、类型、顺序) 只能出现在一个类里 方法的覆盖 overriding 子类对父类定义的方法进行重新定义 1.方法名、返回值类型、参数表相同 2.修饰符不能更窄 3.抛出...

    Java基本语法学习-方法部分笔记

    方法是Java学习中比较重要的部分,也是必须要明白的内容,这个方法讲了方法的定义、使用、重载以及构造方法等。

    Java学习笔记(必看经典)

    JAVA的面向对象编程--------课堂笔记 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 所有的事物都有两个方面: 有什么(属性):用来描述对象。 能够做...

    java学习笔记 - 10

    1.向上造型: 1)超类型的引用指向派生类的对象 2)能点出什么,看引用类型 2.方法重写(override): 1)发生在父子类中,方法名相同,参数列表相同,方法体不同 ...3.重写与重载的区别:------------常见面试题

    个人java总结笔记

    这里需要传入的方法名和方法参数类型的Class对象, 是为了准确的获得方法(因为有方法重载, 方法名一样, 所以需要方法的参数类型) Class对象.getMethods(); 获得所有的公共的方法(包括继承获得的公共构造方法); ...

    java学习笔记 - 8

    1.方法的签名 2.方法重载(Overload) 3.构造方法 4.this 5.null和NullPointerException 内存管理

    java学习笔记–java基础

    java学习笔记 这是目录java学习笔记第一部分. java基础1.1 输入输出用户交互Scanner用户交互Scanner进阶1.2 基本数据类型基本数据类型类型转换变量,常量,作用域运算符补充:包机制补充:JavaDoc1.3 顺序结构1.4 循环...

    JAVA(J2SEJ2EE)学习笔记pdf

    本人两个月来的学习笔记,经过老师的课件和总结精心整理而成。   内容包括:j2se语法、循环控制、OOP设计、方法设计、重写、重载、抽象类/方法、接口、异常处理、多线程、swing。以及部分oracle内容。   本笔记是...

    java内部学习笔记.docx

    2.14 Java系统API方法调用 14 2.15二进制基础 14 2.16 Java基础其他注意事项 14 面向对象 16 3.1类 16 3.2对象 16 3.3包 16 3.4方法及其调用 17 3.5引用 17 3.6访问控制(封装) 17 3.7构造器 17 3.8 super()、super...

    java基础补足和thinking In Java学习.rar

    JAVA学习日记---Thinking in Java学习笔记 第5章总结 第五章 初始化与清理 5.1 用构造器确保初始化 1.构造器命名必须与类名相同 2.构造器也是方法,满足方法的各种特征,无参数的构造器称为默认构造器,默认构造...

    java从入门到精通视频教程(全94讲)学习笔记整理(齐全).docx

    重载.覆盖 -约瑟夫问题 -多态 -抽象类、接口 -final.作业评讲 -作业、测试题 -数组 -排序、查找 -二进制、位运算、位移运算 -集合 -集合 -集合 -集合补充 -异常 -面试题评讲 -布局管理器 -常用组件 -swing编程实战 -...

    JavaSE基础学习笔记

    JavaSE 星辰学习笔记 简介 如何高效的学习Java 案例:创建一个博客网站typecho 基础 Java程序运行机制 数据类型 变量 变量作用域 常量final 变量的命名规范 运算符 for循环 增强for循环 break continue 练习 Java的...

    整理后java开发全套达内学习笔记(含练习)

    Overload [java] 方法的重载(不同参数列表的同名方法) [,әuvә'lәud] Override [java] 方法的覆盖(覆盖父类的方法) [,әuvә'raid] polymiorphism[java] 多态 (polymorphism 多形性[,pɒli'mɒ:fizm]) ...

    java基础笔记

    java初学者的学习笔记,很详细。 目录 0 第一节 7月15日 2 一、 IT行业相关介绍 2 二、C、C++和Java语言的比较 2 三、 JDK基础介绍 2 四、 面向对象与面向过程的比较 2 五、 Java相关介绍 2 六、 Path和Classpath...

Global site tag (gtag.js) - Google Analytics