Страницы

Поиск по вопросам

суббота, 28 декабря 2019 г.

return this.name и отличие

#java


public class Student {

    private String name;

    public Student(String name){
        this.name = name;
    }

    public String getName(){
        return this.name;
    }

    private void setName(String name){
        this.name = name;
    }
}


Увидел вот такой пример и увидел: return this.name, вопрос: Чем отличается return
this.name от return name в данном примере? Почему так написано  return this.name;?
    


Ответы

Ответ 1



this в выражении return this.name; явным образом указывает что поле name считывается из текущего экземпляра объекта Student, а не откуда-то еще, например из аргумента функции. Сравните эти 2 примера: public class Student1 { private String name; public String setAndReturnName(String name){ this.name = name + name; return this.name; } } public class Student2 { private String name; public String setAndReturnName(String name){ this.name = name + name; return name; } } System.out.println(new Student1().setAndReturnName("abc")); // abcabc System.out.println(new Student2().setAndReturnName("abc")); // abc

Ответ 2



В данном случае для метода getName() нет никакой разницы, потому что возвращается именно тот name который в классе является единственным. А вот для примера setName(String name) разница есть. Здесь this.name указывает именно на переменную класса, а просто name это та переменная, которую передали в метод setName. Данный класс, можно переписать вот так public class Human{ int age; public int getAge(){ return age; } public void setAge(int newAge){ age=newAge; } } public class Student extends Human{ private String name; public Student(String name){ this.name = name; super.setAge(10); } public String getName(){ return name; // Здесь убрали параметр this, т.к. нет других name, которые нужно возвращать } public void setName(String name1){ name = name1; // Здесь можно оставить как у вас в примере или переписать так как у меня. // Ключевое слово this ссылается на текущий класс, аналогично как super ссылается на класс, который является родителем текущего класса } } К тому же, в вашем примере, метод setName не может быть private, в противном случае, он будет работать только в рамках вашего класса Student и всё

Комментариев нет:

Отправить комментарий