In Java, sets and gets are not automatic. You have to write them yourselves. There's no law that says you have to name gets and sets "get" and "set". (There IS a law that says that the constructor must have the same name as the class.) The reason for sets and gets is that data fields "should" be private. And "gets" allow other objects to access these fields by use of a public method. public String getName () {return name;} So, in another object I'd say myName = andy.getName(); But I can't say myName = andy.name because name would be private. But Kotlin has ALL data fields be private. However, an automatic set and get method are generated. myName = andy!!.name in Kotlin, I'm still not directly accessing the name field. I'm calling an implicit get method that I didn't have to write myself that is simply running {return name;} andy!!.name = "Andy" is calling an implicit set method that I didn't have to write. You CAN rewrite sets and gets to have them do other things if you like.