构造函数和编译

时间:2014-03-10 22:24:24

标签: java constructor compiler-errors

两件事:

  1. 这是我编写的程序的一部分,但它没有运行。

  2. 一般来说,我得到的任务包括定义2个构造函数,我不明白一个类如何使用2个构造函数,逻辑上。 我想我设法创建了基本的构造函数,但我不知道如何创建它(以及为什么?)。

  3. 第二个构造函数(在/ *和* /之间的代码中显示的构造函数)需要再次接收并复制其值。

    感谢您的帮助!

    =============================================== ===================================

    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);
     }
    
    }
    

1 个答案:

答案 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