Java的方法重载与构造方法及其重载

前言

在讲Java的方法重载前,先说明一下什么是方法的签名!

方法的签名:方法名和参数列表  即 方法的签名=方法名+参数列表

一个类中,不可以有两个方法的签名 完全相同 ,即一个类中不可以有两个方法的方法名参数列表都完全一样。

如果一个类的两个方法只是方法名相同 参数列表不同,是可以的。

ex:

public class Cashier{

    public boolean pay(double money){...}
    public boolean pay(double money){...}
}

//编译错误

public class Cashier{

    public boolean pay(double money){...}
    public boolean pay(String carId){...}
}

//编译正确

说明:方法的签名 是否相同,与返回值类型无关,与变量名也无关,只考虑变量类型

 

方法重载(Overloading)及其意义

在Java语言中,允许多个方法的名称相同,但参数列表不同,称之为方法的重载。

方法重载是让类以统一的方式处理不同类型数据的一种手段。

调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法,这就是多态性。

在方法重载时,方法之间需要存在一定的联系,因为这样可以提高程序的可读性,一般只重载功能相似的方法。

形象化理解

【方法的重载】编译时根据签名绑定调用方法

编译器在编译时会根据签名来绑定调用不同的方法,我们可以把重载的方法看成是完全不同的方法,只不过恰好方法名相同而已。

构造方法

构造方法指 实例化一个类的对象后,如果要给属性赋值,需要通过访问对象的属性setXXX()方法。

在实例化对象后同时给对象的属性赋值可以使用构造方法,构造方法也叫做构造函数,用来对对象进行初始化。

作用:常用于给成员变量初始化。

构造方法语法结构

构造方法是在类中定义的方法,不同于其他的方法,构造方法的定义有如下两点规则:

1、构造方法的名称必须与类名相同;

2、构造方法没有返回值,但也不能写void。

语法:

[访问修饰符]    类名( ){

             //构造方法体

}

通过构造方法初始化成员变量实例

ex:

class Cell{

    int row;
    int col;
    public Cell(int row1,int col1){
        row = row1;
        col = col1;
    }
}

class TestCell{

    public static void main(String args[]){
        Cell c1 = new Cell(15,6); 
//创建对象时,构造方法写在new关键字后,可以理解为:“new”创建了对象,而构造方法对该对象进行初始化。
        printCell(c1);
    }
}

构造方法特点

1.构造方法的名字必须和类名完全相同。

2.方法名前面没有返回值,甚至连表示没有返回值的空类型(void)也没有。

3.在方法中不能使用return语句返回一个值。

4.构造方法一般定义是为public。

5.构造方法是在创建对象时被调用,使用new运算符调用构造方法。

6、若自己不写构造方法,则编译器默认给一个无参构造,若自己写了,则不再默认提供无参构造。

7、构造方法可以重载。

构造方法的重载

为了使用方便,可以对一个类定义多个构造方法,这些构造方法都有相同名称(类名),方法的参数不同(参数类型或参数个数不一样),称之为构造方法的重载。

·一个构造方法可以通过this关键字调用另外一个重载的构遗方法

ex:如何实现构造方法的重载

class Person{
public String name;
public int age;
//定义两个参数的构造方法
public Person(String s,int a){
  name=s;
  age=a;
}
//定义一个参数的构造方法
public Person(String s){
  name=s;
}
//say()方法
public void say(){
//控制台输出name和age的值
  System.out.println("你好!我是" + name + ",今年" + age + "岁。");
  }
}
public class p16 {
public static void main(String[] args) {
  // TODO Auto-generated method stub
  Person p1=new Person("李华");//创建第一个对象
  Person p2=new Person("小名",19);//创建第二个对象
  p1.say();//调用对象的方法
  p2.say();//调用对象的方法
  }
}
//输出结果
你好!我是李华,今年0岁。
你好!我是小名,今年19岁。

在上面代码中,Person类中定义了两个参数构造方法和一个参数构造方法,它们是构造方法的重载。

在创建实例化对象,p1和p2因为传入的参数的不同,调用的不同的构造方法。

我们发现两个构造方法给对象的属性赋值不同,在给一个参数的构造方法中只是给name赋值的,此时的age属性的值是默认为0的。

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值