“Super和this”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) (建立内容为“https://www.bilibili.com/video/BV1bq4y1a73a/”的新页面) |
Jihongchang(讨论 | 贡献) |
||
第1行: | 第1行: | ||
https://www.bilibili.com/video/BV1bq4y1a73a/ | https://www.bilibili.com/video/BV1bq4y1a73a/ | ||
+ | |||
+ | super 代表父类,this 代表当前对象。 | ||
+ | |||
+ | === this.成员属性 === | ||
+ | 先来看 this,<syntaxhighlight lang="java"> | ||
+ | public class Person { | ||
+ | |||
+ | private String name; | ||
+ | |||
+ | private Integer age; | ||
+ | |||
+ | public void setName(String name) { | ||
+ | this.name = name; | ||
+ | } | ||
+ | |||
+ | public void setAge(Integer age) { | ||
+ | this.age = age; | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight>当我们用 IDE 自动生成 set 方法时,通常会用 this.成员属性来接收参数,因为参数名和成员属性名相同, | ||
+ | |||
+ | 我们必须得指定成员属性才不会冲突,所以这里 this 的作用就是指定当前对象的成员属性。 | ||
+ | |||
+ | |||
+ | === this.成员方法 === | ||
+ | 既然都能指定当前对象的成员属性,那成员方法当然也可以通过 this 调用,<syntaxhighlight lang="java"> | ||
+ | public class Person { | ||
+ | |||
+ | public void f1() { | ||
+ | //这两行代码完全等价 | ||
+ | f2(); | ||
+ | this.f2(); | ||
+ | } | ||
+ | |||
+ | public void f2() { | ||
+ | System.out.println("f2"); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight>不过成员方法不会像参数名那样命名冲突,所以我们一般省略 this 关键字,直接调用成员方法。 | ||
+ | |||
+ | 当然如果参数名没有冲突的情况下,<syntaxhighlight lang="java"> | ||
+ | public class Person { | ||
+ | |||
+ | private String name; | ||
+ | |||
+ | private Integer age; | ||
+ | |||
+ | public void setName(String aName) { | ||
+ | //省去this关键字 | ||
+ | name = aName; | ||
+ | } | ||
+ | |||
+ | public void setAge(Integer age) { | ||
+ | this.age = age; | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight>省略 this 关键字来直接调用成员属性也是没问题的。 | ||
+ | |||
+ | |||
+ | === this 调用构造方法 === | ||
+ | 成员属性和成员方法讲完了,还差一个构造方法。<syntaxhighlight lang="java"> | ||
+ | public class Person { | ||
+ | private String name; | ||
+ | private Integer age; | ||
+ | |||
+ | public Person() { | ||
+ | this("匿名", 18); | ||
+ | } | ||
+ | |||
+ | public Person(Integer age) { | ||
+ | this("匿名", age); | ||
+ | } | ||
+ | |||
+ | public Person (String name) { | ||
+ | this(name, 18); | ||
+ | } | ||
+ | |||
+ | public Person(String name, Integer age) { | ||
+ | this.name = name; | ||
+ | this.age = age; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight>直接使用 this 加上括号就代表调用本类的构造方法,这种方式用在构造方法中可以复用其它构造方法的逻辑, | ||
+ | |||
+ | 比如上段代码中最底部的构造器已经完成了属性的赋值逻辑,其它构造方法就没必要再写重复的赋值逻辑了,直接传值就好,this 关键字讲完。 |
2022年10月9日 (日) 05:42的版本
https://www.bilibili.com/video/BV1bq4y1a73a/
super 代表父类,this 代表当前对象。
this.成员属性
先来看 this,
public class Person {
private String name;
private Integer age;
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
}
当我们用 IDE 自动生成 set 方法时,通常会用 this.成员属性来接收参数,因为参数名和成员属性名相同,
我们必须得指定成员属性才不会冲突,所以这里 this 的作用就是指定当前对象的成员属性。
this.成员方法
既然都能指定当前对象的成员属性,那成员方法当然也可以通过 this 调用,
public class Person {
public void f1() {
//这两行代码完全等价
f2();
this.f2();
}
public void f2() {
System.out.println("f2");
}
}
不过成员方法不会像参数名那样命名冲突,所以我们一般省略 this 关键字,直接调用成员方法。 当然如果参数名没有冲突的情况下,
public class Person {
private String name;
private Integer age;
public void setName(String aName) {
//省去this关键字
name = aName;
}
public void setAge(Integer age) {
this.age = age;
}
}
省略 this 关键字来直接调用成员属性也是没问题的。
this 调用构造方法
成员属性和成员方法讲完了,还差一个构造方法。
public class Person {
private String name;
private Integer age;
public Person() {
this("匿名", 18);
}
public Person(Integer age) {
this("匿名", age);
}
public Person (String name) {
this(name, 18);
}
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
}
直接使用 this 加上括号就代表调用本类的构造方法,这种方式用在构造方法中可以复用其它构造方法的逻辑,
比如上段代码中最底部的构造器已经完成了属性的赋值逻辑,其它构造方法就没必要再写重复的赋值逻辑了,直接传值就好,this 关键字讲完。