构造函数的实现方式

ways of implementing constructor

我是 java 的新手,掌握了基础知识,但是下面的代码让我对构造函数的概念感到困惑,即它似乎与我学习的不同(我不确定,我是这里是初学者...所以有人可以向我解释一下吗。

我得到的代码:

    public void Msg(String from, String to, String subject) {
        setFrom(from);
        setTo(to);
        setSubject(subject);
    }

我认为如果我将其更改为以下代码,它会同样有效:

    public void Msg(String from, String to, String subject) {
        setFrom = from;
        setTo = to;
        setSubject = subject;
    }

但是改了之后就不行了。谁能告诉我这背后的原因是什么?

SetFrom 是方法而不是变量。如果你想让你的构造函数像那样被使用,你需要像下面这样的东西。

private String from;
private String to;
private String subject;

public Msg(String from, String to, String subject) {
    this.from = from;
    this.to = to;
    this.subject = subject;
}

public String getFrom() {
    return this.from;
}

public void setFrom(String from) {
    this.from = from;
}

加上@Lachlan Goodhew-Cook,非常精确,您还可以在构造函数中调用方法,例如在您的设置器中添加一些数据验证时:

    private String from;
    private String to;
    private String subject;

    public Msg(String from, String to, String subject) {

        // This is a call to your method defined below, passing the constructor
        // parameter (from) as an argument to setFrom()
        setFrom(from);

        // These access your data fields (instance variables) straight ahead
        // Need "this" keyword because constructor parameters have same name of data
        // fields (attributes) identifiers. "this" refers to your instance variables
        // being assigned the values passed as arguments to your constructor
        this.to = to;
        this.subject = subject;
    }

    public String getFrom() {

        // Don't need "this" keyword
        return from;
    }

    public void setFrom(String newFrom) {
        if (/*newFrom is valid input*/) {

            // Don't need "this" keyword
            from = newFrom;
        }
    }

这只是一个示例,旨在说明您可以在构造函数中调用方法。

顺便说一句,当您的 method/constructor 参数与您的实例变量具有相同的名称(标识符)时,您只需要使用关键字 this