2015-04-16 3 views
-1

Я новичок в 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; 
    } 

, но он не работает после изменения. Любой может рассказать мне, что может быть причиной этого?

+0

Это метод, а не конструктор. Конструкторы не имеют типов возврата ('void') и имеют то же имя, что и класс. Что касается 'setFrom (from)' to' setFrom = from' не работает, 'setFrom (from)' является вызовом метода, для которого требуется объявление метода, чтобы иметь возможность сделать это. 'setFrom = from' назначает переменную. Для этого нужно объявить переменную 'setFrom'. Синтаксис не является взаимозаменяемым. –

+0

Во-первых, ваше объявление конструктора неверно, так как оно не может иметь тип возврата ('void') в вашем случае. –

+0

'setFrom' и т. Д. - это метод, поэтому вы не можете присвоить ему значение. –

ответ

1

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; 
} 
+0

У меня есть человек. Я запутался. но теперь я помню, что речь шла о различии между методом и конструктором –

1

Добавление до @Lachlan Гудхью-Кук, который является совершенно точным, вы также можете вызвать методы в конструкторах, для случая, когда вы добавляете некоторые проверки данных в ваших сеттеров, например:

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

Это просто пример, чтобы показать, что вы можете вызывать методы внутри конструкторов, как возможность.

Кстати, вам нужно использовать только ключевое слово this, когда параметры вашего метода/конструктора имеют одинаковое имя (идентификаторы) ваших переменных экземпляра.

Смежные вопросы