构造函数中的 this.setMethod(parameter) 和 setMethod(parameter) 有什么区别? [Java]
What is the difference between this.setMethod(parameter) and setMethod(parameter) in a constructor? [Java]
最近几天我一直在尝试了解 类 和对象,我意识到在构造函数中使用“this.set”和“set”没有明显区别。澄清
public Movie(String title,String director, String rating) {
setTitle(title);
setDirector(director);
setRating(rating);
和
public Movie(String title,String director, String rating) {
this.setTitle(title);
this.setDirector(director);
this.setRating(rating);
没有区别,而 运行。
有什么区别,如果有的话,哪个更好?
我原以为会出现某种错误,但结果完全一样。此外,我的讲师 不 使用“this”。在他的示例中将 setter 放入构造函数中。
谢谢。
在 this.*
中,您正在调用位于“this”实例的方法。从实现相同方法的 class 继承时,您还有机会调用 super.setTitle()。
或者举个例子:
class Foo
{
public int baz()
{
return -1;
}
}
class Bar extends Foo
{
private Bar()
{
super.baz(); // returns -1
this.baz(); // returns 1
}
public int baz()
{
return 1;
}
}
在您的示例中调用 setter 方法时无需使用 this
(这不是标准做法)。但是,如果要在构造函数中设置与变量同名的字段,则必须使用 this
。例如:
public class Movie {
private final String title;
public Movie(String title) {
this.title = title;
}
}
如果您不指定 this.title
,它会认为您正在尝试将 title
变量分配给它自己。
当你的class扩展了另一个class时,关键字this
也需要区分方法的不同实现(例如你可以调用this.method()
或super.method()
.)
最近几天我一直在尝试了解 类 和对象,我意识到在构造函数中使用“this.set”和“set”没有明显区别。澄清
public Movie(String title,String director, String rating) {
setTitle(title);
setDirector(director);
setRating(rating);
和
public Movie(String title,String director, String rating) {
this.setTitle(title);
this.setDirector(director);
this.setRating(rating);
没有区别,而 运行。
有什么区别,如果有的话,哪个更好?
我原以为会出现某种错误,但结果完全一样。此外,我的讲师 不 使用“this”。在他的示例中将 setter 放入构造函数中。
谢谢。
在 this.*
中,您正在调用位于“this”实例的方法。从实现相同方法的 class 继承时,您还有机会调用 super.setTitle()。
或者举个例子:
class Foo
{
public int baz()
{
return -1;
}
}
class Bar extends Foo
{
private Bar()
{
super.baz(); // returns -1
this.baz(); // returns 1
}
public int baz()
{
return 1;
}
}
在您的示例中调用 setter 方法时无需使用 this
(这不是标准做法)。但是,如果要在构造函数中设置与变量同名的字段,则必须使用 this
。例如:
public class Movie {
private final String title;
public Movie(String title) {
this.title = title;
}
}
如果您不指定 this.title
,它会认为您正在尝试将 title
变量分配给它自己。
当你的class扩展了另一个class时,关键字this
也需要区分方法的不同实现(例如你可以调用this.method()
或super.method()
.)