两件事:
这是我编写的程序的一部分,但它没有运行。
一般来说,我得到的任务包括定义2个构造函数,我不明白一个类如何使用2个构造函数,逻辑上。 我想我设法创建了基本的构造函数,但我不知道如何创建它(以及为什么?)。
第二个构造函数(在/ *和* /之间的代码中显示的构造函数)需要再次接收并复制其值。
感谢您的帮助!
=============================================== ===================================
public class Time1 {
private int _hour,
_minute,
_second;
public Time1 (int h, int m, int s) {
if (hourIsValid (h))
_hour = h;
else _hour = 0;
if (minuteIsValid (m))
_minute = m;
else minute = 0;
if (secondIsValid (s))
_second = s;
else _second = 0;
}
boolean hourIsValid (h) {
return (h <= 23 && h >= 0);
}
boolean minuteIsValid (m) {
return (m <= 59 && m >= 0);
}
boolean secondIsValid (s) {
return (s <= 59 && s >= 0);
}
/* public Time1 (Time1 other) {...
}
*/
int getHour() {
return _hour;
}
int getMinute() {
return _minute;
}
int getSecond() {
return _second;
}
void setHour (int num) {
if (num >= 0 && num <= 23)
_hour = num;
}
void setMinute (int num) {
if (num >= 0 && num <=59)
_minute = num;
}
void setSecond (int num) {
if (num >= 0 && num <=59)
_second = num;
}
String toString () {
String strH,
strM,
strS;
if (_hour < 10)
strH = "0" + _hour + ":";
else strH = _hour + ":";
if (_minute < 10)
strM = "0" + _minute + ":";
else strM = _minute + ":";
if (_second < 10)
strS = "0" + _second;
else strS = _second;
return (strH + strM + strS);
}
/*if (_hour < 10)
System.out.print("0" + _hour + ":");
else System.out.print(_hour + ":");
if (_minute < 10)
System.out.print("0" + _minute + ":");
else System.out.print(_minute + ":");
if (_second < 10)
System.out.print("0" + _second);
else System.out.print(_second);
}
*/
boolean equals (Time1 other) {
return ((_hour == other._hour) && (_minute == other._minute) && (_second == other._second));
}
boolean before (Time1 other) {
return ((_hour < other._hour) ||
((_hour == other._hour) && (_minute < other._minute)) ||
((_hour == other._hour) && (_minute == other._minute) && (_second < other._second)));
}
boolean after (Time1 other) {
return other.before(this);
}
int difference (Time1 other) {
int obSec, otherSec;
obSec = ((_hour * 60 * 60) + (_minute * 60) + _second);
otherSec = ( (other._hour * 60 * 60) + (other._minute * 60) + other._second);
return (obSec - otherSec);
}
}
答案 0 :(得分:3)
这称为重载。您可以定义具有相同名称的方法,只要它们具有不同的参数,但共享返回类型(或返回void,或者在构造函数的情况下,缺少返回类型)。编译器将根据用于调用它的参数知道要使用的方法。
在这种情况下,我猜你想要的是:
public Time1 (Time1 other) {
this._hour = other.getHour();
this._minute = other.getMinute();
this._second = other.getSecond();
}
另一种选择是使用this
关键字链接构造函数,如下所示:
public Time1 (Time1 other) {
this(other.getHour(), other.getMinute(), other.getSecond());
}
如果要从传递给构造函数的Time1对象中复制变量。当然你应该添加错误检查等,但我希望你能得到一般的想法。
Oracle可能会考虑一些不错的tutorials。