java必学必会之方法的重载(overload)

一、方法的重载

  

  方法名一样,但参数不一样,这就是重载(overload)。

  所谓的参数不一样,主要有两点:第一是参数的个数不一样,第二是参数的类型不一样。只要这两方面有其中的一方面不一样就可以构成方法的重载了。

package cn.galc.test;

public class TestOverLoad {

  void max(int a, int b) {
    System.out.println(a > b ? a : b);
  }

  /*
   * int max(int a, int b) {
   *     return a > b ? a : b;
   * }
   */

  void max(float a, float b) {
    System.out.println(a > b ? a : b);
  }
}

  这里有void修饰符的两个max方法名字相同,但它们的参数类型不一样,所以可以构成重载。而int  max(int a , int b)方法与void  max(int a, int b)方法是不构成重载的,现在它们是重名的两个方法,在一个类中声明两个重名的方法是不允许的,编译会出错。方法名一样,参数类型一样,只有返回值不一样,这个不构成重载,因为方法可以这么调用,调用一个方法时可以不使用的它返回值,所以当调用这两个方法时,把整型的数传进去,由于两个方法都是一样的名字,一样的参数类型,所以编译器无法区分到底要调用的是哪一个方法。构成重载深层次的原因:只要这两个方法编译器能区分开来,在调用的时候知道要调用的是哪一个,不会产生混淆,这两个方法就构成重载。

再看下面这两个方法:

int max(int a, int b) {
  System.out.println("调用的int max(int a, int b)方法");
  return a > b ? a : b;
}

int max(short a, short b) {
  System.out.println("调用的int max(short a, short b)方法");
  return a > b ? a : b;
}

  这两个方法也是可以构成重载的,因为编译器一看到整数,就会把它当作int类型。所以当把整数传进来的时候,编译器首先调用的是max(int a , int b)这个方法。而要想调用max(short a ,short b)这个方法,那么就得在main方法里面这样写:

public static void main(String[] args) {
  TestOverLoad t= new TestOverLoad();
  t.max(3,4); //这里调用的是max(int a , int b)这个方法
  short a = 3;
  short b = 4;
  t.max(a, b); //这里调用的是max(short a , short b)这个方法。
}

二、构造方法的重载

与普通方法一样,构造方法也可以重载

package cn.galc.test;

public class Person {

  int id;
  int age;

  /**
   * 构造方法
   */
  public Person() {
    id=0;
    age=20;
  }

  /**
   * 构造方法重载一
   * @param i
   */
  public Person(int i) {
    id=i;
    age=20;
  }

  /**
   * 构造方法重载二
   * @param i
   * @param j
   */
  public Person(int i,int j) {
    id=i;
    age=j;
  }
}

以上就是针对java方法的重载进行的详细解释,希望对大家的学习有所帮助。

时间: 2015-12-01

浅谈Java方法的重载

方法的重载是指一个类中可以定义有相同的名字,但参数不同的多个方法,调用时,会根据不用的参数表选择对应的方法 比如 public class Test { void max(int a,int b) { System.out.println(a>b ? a:b); } void max(double a,double b) { System.out.println(a>b ? a:b); } public static void main(String[] args) { Test t = ne

解析Java继承中方法的覆盖和重载

方法的覆盖 在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称.返回值类型.参数列表. 如果在新类中定义一个方法,其名称.返回值类型和参数列表正好与父类中的相同,那么,新方法被称做覆盖旧方法. 参数列表又叫参数签名,包括参数的类型.参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同. 被覆盖的方法在子类中只能通过super调用. 注意:覆盖不会删除父类中的方法,而是对子类的实例隐藏,暂时不使用. 请看下面的例子: public c

Java的方法重载与变量作用域简介

方法的重载 上面使用的max方法仅仅适用于int型数据.但如果你想得到两个浮点类型数据的最大值呢? 解决方法是创建另一个有相同名字但参数不同的方法,如下面代码所示: public static double max(double num1, double num2) { if (num1 > num2) return num1; else return num2; } 如果你调用max方法时传递的是int型参数,则 int型参数的max方法就会被调用: 如果传递的事double型参数,则doub

Java基础教程之构造器与方法重载

在方法与数据成员中,我们提到,Java中的对象在创建的时候会初始化(initialization).初始化时,对象的数据成员被赋予初始值.我们可以显式初始化.如果我们没有给数据成员赋予初始值,数据成员会根据其类型采用默认初始值. 显式初始化要求我们在写程序时就确定初始值,这有时很不方便.我们可以使用构造器(constructor)来初始化对象.构造器可以初始化数据成员,还可以规定特定的操作.这些操作会在创建对象时自动执行. 定义构造器 构造器是一个方法.像普通方法一样,我们在类中定义构造器.构造

java方法重载示例

什么是方法的重载? 方法重载是以统一的方式处理不同数据类型的一种手段. 怎样构成方法的重载? 方法名相同, 形参不同.而形参的不同又表示在:  1). 形参的个数不同  2). 形参的类型不同 3). 形参的顺序不同 注意事项 1. 如果两个方法的返回值不同, 而其他都相同. 这个时候并不构成方法的重载. 在编译的时候会报错: 示例代码(错误):Test.java 复制代码 代码如下: /*返回值的不同并不能构成方法的重载*/public class Test {    public stati

Java的this关键字的使用与方法的重载相关知识

Java this关键字详解 this 关键字用来表示当前对象本身,或当前类的一个实例,通过 this 可以调用本对象的所有方法和属性.例如: public class Demo{ public int x = 10; public int y = 15; public void sum(){ // 通过 this 点取成员变量 int z = this.x + this.y; System.out.println("x + y = " + z); } public static vo

浅谈java实现重载的方法

重载(重新载选方法): java允许在一个类中,存在多个方法拥有相同的名字,但在名字相同的同时,必须有不同的参数,这就是重载,编译器会根据实际情况挑选出正确的方法,如果编译器找不到匹配的参数或者找出多个可能的匹配就会产生编译时错误,这个过程被称为重载的解析. 重载包括:普通方法的重载和构造方法的重载 方法:即函数(文中我们统称之为"方法"),是一个固定的一个程序段,或称其为一个子程序,它在可以实现固定运算功能.而且,同时还带有一个入口和一个出口,所谓的入口,就是函数所带的各个参数,我们

浅谈Java泛型让声明方法返回子类型的方法

泛型典型的使用场景是集合.考虑到大多数情况下集合是同质的(同一类型),通过声明参数类型,可免去类型转换的麻烦.本文将讨论本人阅读Spring Security源码时遇到的一个关于泛型递归模式的问题. 声明方法返回子类型 在Spring Security的源码里有一个ProviderManagerBuilder接口,声明如下 public interface ProviderManagerBuilder<B extends ProviderManagerBuilder<B>> ext

浅谈java中==以及equals方法的用法

equals 方法是 java.lang.Object 类的方法. 有两种用法说明: (1)对于字符串变量来说,使用"=="和"equals()"方法比较字符串时,其比较方法不同. "=="比较两个变量本身的值,即两个对象在内存中的首地址. "equals()"比较字符串中所包含的内容是否相同. 比如: String s1,s2,s3 = "abc", s4 ="abc" ; s1 =

浅谈Java中的hashcode方法(推荐)

哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率.在Java的Object类中有一个方法: public native int hashCode(); 根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现. 为何Object类需要这样一个方法?它有什么作用呢?今天我们就来具体探讨一下hashCode方法. 一.hashCode方法的作用 对于包含容器类型的程序设计语言来说,基本上都会涉及到has

浅谈Java线程Thread.join方法解析

join字面上是加入的意思,我们先看看join方法的解释和实现. /** * Waits for this thread to die. * 调用方线程(调用join方法的线程)执行等待操作,直到被调用的线程(join方法所属的线程)结束,再被唤醒 * <p> An invocation of this method behaves in exactly the same * way as the invocation * * * @throws InterruptedException *

浅谈Java泛型通配符解决了泛型的许多诟病(如不能重载)

泛型: package Java基础增强; import java.util.ArrayList; import java.util.List; import org.junit.Test; public class Test2 { @Test public void fun1(){ Object[] objects = new Object[10]; List list = new ArrayList(); String[] strings = new String[10]; List<Str

浅谈Java中的重载,重写,多态,静态绑定、动态绑定

本文主要研究的是关于Java中重载,重写,多态,静态绑定.动态绑定的相关内容,具体如下. 重载,英文名是overload,是指在一个类中定义了一个以上具有相同名称的方法,这些方法的参数个数.参数类型和顺序不能相同.返回类型可以相同,也可以不同. public class TstaticOverload { static int height; TstaticOverload() { System.out.println ("Planting a seedling"); height =

浅谈Java异常的Exception e中的egetMessage()和toString()方法的区别

Exception e中e的getMessage()和toString()方法的区别: 示例代码1: public class TestInfo { private static String str =null; public static void main(String[] args) { System.out.println("test exception"); try { if(str.equals("name")){ System.out.println

浅谈java 执行jar包中的main方法

浅谈java 执行jar包中的main方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar 执行后总是运行指定的主方法,如果 jar 中有多个 main 方法,那么如何运行指定的 main 方法呢? 用下面的命令试试看: java -classpath ****.jar ****.****.className [args] "****.****"表示"包名": "className"表示&

浅谈java Iterator.remove()方法的用法(详解)

实例如下: @Test public void tt(){ List<String> list = new ArrayList<String>(); list.add( "0" ); list.add( "1" ); list.add( "2" ); list.add( "3" ); list.add( "4" ); list.add( "5" ); list.a