Java入门第52课——给Cell类添加重载的构造方法
问题
给Cell类添加重载的构造方法,详细要求如下:
1.为Cell类定义默认构造方法,使用该构造方法创建对象,并打印显示。
2.继续为Cell类定义构造方法,要求该构造方法接收一个Cell类型的参数。使用该构造方法,创建一个位置为(0,4)的格子,并打印显示。
方案
可以对一个类定义多个构造方法,这些构造方法都有相同的名称(类名),但是参数不同,称之为构造方法的重载。在创建对象时,Java编译器会根据不同的参数调用不同的构造方法。
我们已经为Cell类定义了带有两个参数的构造方法,这样,就可以使用如下代码创建Cell对象:
Cell cell2=new Cell(0,4); //row为0,col为4
但是,此时,就不能再用如下的方式创建Cell对象了:
Cell cell2=new Cell();
这是因为,当我们为类定义了构造方法后,Java编译器将不再为该类添加默认的构造方法。如果依然希望能够使用默认的方式来创建对象,则需要为类重新定义默认的构造方法,代码如下所示:
public Cell(){
}
在默认构造方法中,依然需要为成员变量col和row赋值,则可以使用如下代码:
public Cell(){
this(0,0);
}
我们可以继续为Cell类定义带有其他类型参数的构造方法,代码如下所示:
public Cell(Cell cell){
this(cell.row,cell.col);
}
然后,可以使用如下的方式创建Cell对象:
Cell cell1=new Cell(0,4);
Cell cell2=new Cell(cell1);
当我们为类定义了多个构造方法后,在实际使用时,可以根据实际情况选择合适的构造方法。
步骤
实现此案例需要按照如下步骤进行。
步骤一:为Cell类添加默认构造方法
在Cell类中,定义默认构造方法。代码如下所示:
public class Cell{
int row;
int col;
/**
*使用this关键字重构
*@param row:行
*@param col:列
*/
public Cell(int row,int col){
this.row=row;
this.col=col;
}
/**
*默认构造方法
*/
public Cell(){
this(0,0);
}
}
步骤二:测试默认构造方法
修改CellGame类的main方法,使用默认构造方法创建Cell对象,并进行打印测试,代码如下所示:
public static void main(String[] args){
System.out.println("---------绘制Cell----------");
//创建Cell对象,并打印
Cell cell2=new Cell();
printCell(cell2);
}
步骤三:再为Cell类添加一个构造方法
在Cell类中,定义接收Cell类型参数的构造方法。代码如下所示:
public class Cell{
int row;
int col;
/**
*使用this关键字重构
*@param row:行
*@param col:列
*/
public Cell(int row,int col){
this.row=row;
this.col=col;
}
/**
*默认构造方法
*/
public Cell(){
this(0,0);
}
/**
*构造方法的重载
*@param cell
*/
public Cell(Cell cell){
this(cell.row,cell.col);
}
}
步骤四:测试Cell类型参数的构造方法
修改CellGame类的main方法,使用新添加的构造方法创建Cell对象,并进行打印测试,代码如下所示:
public static void main(String[] args){
System.out.println("-----------绘制Cell-------------");
//创建Cell对象,并打印
//Cell cell2=new Cell();
//printCell(cell2);
//创建Cell对象,并打印
Cell cell1=new Cell(0,4);
Cell cell2=new Cell(cell1);
printCell(cell2);
}
博主点评:
构造方法也是方法,故可以重载。
编译器会默认添加无参构造方法,若自己写了构造方法,则会覆盖,面试题经常考。
扫码关注我吧:

智能推荐
Java入门第82课——StringBuilder的append方法
问题 StringBuilder类提供将各种数据类型变量的字符串形式追加到当前序列中的append方法,在Java API中提供的append重载方法如图-15所示: 本案例要求将字符串"java&...
Java入门第92课——包装类
1.1 包装类概述 1.1.1 包装类概述 · 在进行类型转换的范畴内,有一种特殊的转换,需要将int这样的基本数据类型转换为对象; · 所有基本类型都有一个与之对应的类,即包装类(wrapper)。 包装...
Java入门第12天 (方法重载 ,方法的参数传递)
需求:使用方法重载的思想,设计比较两个整数是否相同的方法,兼容全整类型(byte ,short ,int ,long) 7:方法的参数传递 (1):对于引用类型的参数,形式参数的改变,影响实际参数的值。 * 案例:需求:输入星期数,显示今天的减肥活动 周一:跑步 周二:游泳 周三:动感单车 周四:拳击 周五:爬山 周六:慢跑 周日:休息 思路: 1:键盘录入一个星期数,用一个变量接收 2:对星期数...
Java入门第64课——抽象类和接口
很多同学不知道抽象类和接口究竟有什么作用。认真学完本节课,再做点练习(课后的案例和作业),即可了解抽象类和接口的美妙之处。 概要: 1.1 使用抽象类 1.1.1 抽象方法和抽象类 &nbs...
猜你喜欢
Java的方法重载与构造方法及其重载
前言 在讲Java的方法重载前,先说明一下什么是方法的签名! 方法的签名:方法名和参数列表 即 方法的签名=方法名+参数列表 一个类中,不可以有两个方法的签名 完全相同 ,即一个类中不可以有两个方法的方法名和参数列表都完全一样。 如果一个类的两个方法只是方法名相同 而 参数列表不同,是可以的。 ex: 说明:方法的签名 是否相同,与返回值类型无关,与变量名也无关,只考虑变量类...
Java入门第59课——方法重写规则
问题 在TetrominoT和TetrominoJ类中重写父类Tetromino的print方法,并进行测试,控制台输出结果如下所示: 方案 首先,在TetrominoT类中,重写print方法。方法的重写要...
Java入门第93课——Number的intValue和doubleValue方法
问题 在Java中,抽象类Number是BigDecimal、BigInteger、Byte、Double、Float、Integer、Long和Short类的超类。该类提供了六个方法,如图-1所示。 byte byteValue() 以byte形式返回指定的数值。 abstract double doubleValue()  ...
java方法(调用、重载),数组(创建,多维),对象、类的封装、构造方法
今天记点纯知识 (由于学了c++,方法之类的就不写了) 方法 定义一个方法 修饰符:访问类型 returnValueType :方法返回值的数 据类型 方法调用: 当方法返回一个值, 如果方法返回值是void,方法调用一定是一条语句 方法重载 最基础的:2个方法—有相同名字但参数不同 就是说一个类的两个方法拥有相同的名字,但是有不同的参数列表 Java编译器根据方法签名判断哪个方法应该...
