`
liuwei1981
  • 浏览: 770096 次
  • 性别: Icon_minigender_1
  • 来自: 太原
博客专栏
F8258633-f7e0-30b8-bd3a-a0836a5f4de5
Java编程Step-by...
浏览量:160696
社区版块
存档分类
最新评论

62.方法的重载

 
阅读更多

在Java程序中,如果同一个类(或者父类子类之间)中如果有两个相同的方法(方法名相同、返回值相同、参数列表相同)是不行的,因为这样编译器无法将方法调用和特定的方法联系起来。但是,在一个类中,如果有多个方法具有相同的名称,而有不同的参数,这种情况是允许的,我们就称这种行为为方法的重载(overload)。

 

我们经常使用println来向控制台输出各种类型的数据,这些println方法就是实现了方法的重载。


在进行方法的重载时方法的参数列表必须不同(参数个数或者参数数据类型,或者两者皆不同)。而方法的返回值可以相同,也可以不同。


我们来看一个例子。还是以上面的“Person”类,我们需要取得“Person”对象的“name(姓名)”属性,可能会有两种情况:一种是直接得到对象的“name”属性,还有一种情况是在获取的对象属性“name”的方法上输入一个参数,将这个参数当作头衔和“name”结合起来,比如:输入的头衔是“先生”,则通过方法返回的是:“XXX先生”。

 

我们可以为这两个需求定义两个方法,但是,为了显示这两个方法的相似点,我们更倾向于使用方法重载来完成:
public class Person{
 … …
 public String getName() {
  return name;
 }
 public String getName(String title) {
  return name+title;
 }
 … …
}


这样,如果只需要得到“Person”对象的“name”属性,调用不带参数的getName()方法就可以了;如果需要得到“Person”对象的“name”属性并且需要指明它的头衔,则可以调用带一个参数的getName()方法。


在进行方法的重载时,有四条基本原则需要遵守:


方法名相同;
参数列表必须不同;
返回值可以不同;
可以相互调用。


注意:方法的返回值不是方法的签名(signature)的一部分,所以,进行方法的重载的时候,不能将返回值类型的不同当成两个方法的区别。也就是说,在同一个类中,不能有这样的两个方法,它们的方法名相同、参数相同,只是方法的返回值类型不同。


构造器重载

 

在前面我们说过,构造器在某种程度上可以看成是一个特殊的方法:它没有返回值,它的方法名称必需和类的名称一致。因此,构造器也常常被称为“构造方法”。

 

作为Java类的组成成分之一,构造器也可以进行重载,下例中的类Person就定义了4个重载的构造器以满足不同的需要。


public class Person {
 private String name;

 private int age;

 private String sex;

 public Person() {
  System.out.println("构造器Person()被调用");
  name = "";
 }

 public Person(String theName) {
  System.out.println("构造器Person(String theName)被调用");
  name = theName;
 }

 public Person(String theName, int theAge) {
  System.out.println("构造器Person(String theName,int theAge)被调用");
  name = theName;
  age = theAge;
 }

 public Person(String theName, int theAge, String theSex) {
  System.out.println("构造器Person(String theName,"
    + "int theAge,String theSex)被调用");
  name = theName;
  age = theAge;
  sex = theSex;
 }
 // 其他代码
 // …. …
}


在这个类中,定义了四个构造器,这四个构造器中,各自的参数个数都不一样。在创建对象的时候,编译器会根据参数类型和参数个数来确定到底调用哪一个构造器。


我们来看下面这个创建“Person”对象的例子:

public class NewPerson {
 public static void main(String[] args) {
  Person person = new Person("Tom", 18, "male");
 }
}


编译并运行上面这个程序,它将会向控制台打印出如下信息:
构造器Person(String theName,int theAge,String theSex)被调用


这说明,它的带三个参数的构造器被调用来创建Person对象了。

分享到:
评论

相关推荐

    c#3.0语言规范高清PDF

    1.6.6.5 方法重载 ...................................................................................................................................... 19 1.6.7 其他函数成员 .............................

    C#语言参考(共285页)

    3.4 签名和重载..........................62 3.5 范围......................................63 3.5.1 名称隐藏.......................65 3.6 名称空间或类型名称..........67 3.6.1 合格的名称....................

    Perl高级教程人称“大骆驼”(免费)

    目录 第一章 Perl概述............................................................................................................................10 1.1 从头开始............................................

    C# 使用方法 入门教程

    5.4 运算符重载...... 132 5.4.1 运算符的工作方式..... 133 5.4.2 运算符重载的示例: Vector结构..... 134 5.5 用户定义的数据类型转换...... 141 5.5.1 执行用户定义的类型转换..... 142 5.5.2 多重数据类型转换....

    MVC源码学习:打造自己的MVC框架

    目录 MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理) ............................................................................... 3 一、MVC原理解析 ..........................................

    GPU编程与 CG语言 中文版(1)

    第1章 绪论............................................................................................................13 1.1 Programmable Graphics Processing Unit发展历程................................

    nasm PC汇编语言 教程

    3.6.3 方法三. . . . . . . . . . . . . . . . . . . . . . . . . . . 55 目录5 第4章子程序57 4.1 间接寻址. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 4.2 子程序的简单例子. . . . . . . . . ...

    JAVA填空题 (2).pdf

    64. 方法重载(Overloading)是指一个类中可以有多个方法具有相同的名字但参数列表不同。 65. Java允许方法名重载。 66. 构造函数是一个特殊方法,其名称与类名相同,不返回任何数据类型。 67. Java中的方法分为实例...

    重载卡车下三跨连续梁桥的设计

    本文针对这一实际设计案例,提出了对于重载卡车下的桥梁结构设计与计算的方法和思路。 首先,对于设计桥梁时所遵循的车辆荷载标准,通常是指在公路桥梁设计时所采用的荷载,其中规定了车辆的质量为55吨。桥梁工程师...

    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. 系统构造一...

    阶段62:ReactNative第6天(2018.11.4).rar

    3. **热重载**:React Native提供了一个强大的开发工具,支持实时热重载。这使得开发者可以在不重启应用的情况下看到代码更改的效果,极大地提高了开发效率。 4. **原生API集成**:虽然React Native使用JavaScript...

    JAVA复习题(有答案).doc

    解释:多态可以通过方法重写和方法重载实现。 问题11:下列语句中访问类的方法正确的是:( ) A)book.name B)book.name( ) C)book->name D)book_name 解释:访问类的方法正确的语句是book.name( )。 问题12...

    C++入门指南-v2.4.pdf

    2.4 C++新增的标准输入输出方法(cin和cout) 22 2.5 C++规定的变量定义位置 24 2.6 C++新增的布尔类型(bool) 24 2.7 C++ 新增的new和delete运算符 25 2.8 C++函数的默认参数(缺省参数) 26 2.9 C++函数重载详解 28 ...

    面试小抄第二版.pdf

    **重载与重写**:重载发生在同一个类中,方法名相同但参数列表不同;重写发生在子类中,方法名、返回类型和参数列表都相同。 23. **构造器不可被重写**:构造器不能被子类覆盖,但可以被重载。 24-25. **抽象类与...

    Java英语词汇表.pdf

    50. **Overloaded method**:重载方法,同一类中具有相同名字但参数列表不同的方法。 51. **Overridden method**:重写方法,子类重新定义父类的方法。 52. **Package**:组织Java类的命名空间,有助于管理类和避免...

Global site tag (gtag.js) - Google Analytics