2016-11-01 2 views
0

Я изучаю scala, и я попробовал следующий код.запутаться при вызове основного конструктора в scala

object Demo7 { 
     def main(args: Array[String]): Unit = { 
       class Person(val fullName: String) { 
         println(s"This is the primary constructor. Name is ${fullName}") 
         val initial = fullName.substring(0, 1) // Computed during initialization 

         //def this(firstName: String, lastName: String) = this(s"$firstName $lastName") 

       } 
       new Person("Tek Tuk") 
       new Person("Tek Tuk").fullName 

     } 
} 

затем я запускаю. Я получаю тот же результат, что и каждый звонок. для моего понимания этой линии

new Person("Tek Tuk").fullName 

Не стоит обобщать, кто может объяснить мне, почему эта линия получить компилировать и возвращает тот же результат, что и в первой строке?

спасибо.

+0

Не могли бы вы написать вопрос как полное предложение? –

+0

Почему, по вашему мнению, вторая строка должна приводить к ошибке? – fxlae

+0

Какая ошибка вы получаете? Какое поведение вы ожидаете? – talex

ответ

5

Если вы спрашиваете, почему вам разрешен доступ к полю fullName вашего класса Person, это потому, что вы указали его как список val в списке параметров.

Это то же самое, что объявить это поле public final в Java. Если вы хотите быть частным, просто удалите val часть, т.е.

class Person(fullName: String) { 
    (...) 
} 

А почему оба вызова «возврата» то же самое - они этого не делают.

  • new Person("Tek Tuk") возвращает экземпляр Person.
  • new Person("Tek Tuk").fullName"Tek Tuk" - a String. Вы создали еще один экземпляр Person с тем же fullName, и вы назвали его fullName.

И, тем не менее, печать "This is the primary constructor. Name is Tek Tuk", так как вы назвали тот же конструктор в обоих случаях и у вас есть println, который печатает это в конструкторе.

+0

спасибо, я понимаю это сейчас. – kn3l

+1

Незначительный каламбур с «Это то же самое, что объявить его публичным конечным полем в Java». Это фактически частное поле с общедоступным методом getter. –

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