this
this使用的场景一
- 当属性名与方法的参数名相同的时候,可以使用 this.名称 表示属性名,而使用 名称 表示参数名。
1 String name = "野猫";2 void setName(String name) {3 // this.name 代表属性名name4 // name 代表参数名5 this.name = name;6 }
- 如果参数名与属性名不相同,这样既可以使用this,也可以不用
this使用的场景二
- 在一个构造器中调用另一个构造器 使用this()
String name;// 在一个构造器中调用另一个构造器 使用this()Cat() { this("野猫");}Cat(String name) {this.name = name;}
this使用的场景三
- 返回当前类对象本身。以便使用者进行链式调用(初学者慎用)
int age = 0;Cat incr() { age++; return this;} // 年龄增加 链式调用(初学者不建议使用)cat1.incr().incr().incr().incr();System.out.println(cat1.age);
this使用的场景四
- 把this作为参数传递到方法中
public class Fruit { String name; Fruit(String name) { this.name = name;}// 水果被人吃void getEated(Man man) { man.eat(this);}} public class Man { void eat(Fruit fruit) { System.out.println("man eat " + fruit.name); }} // 水果被人吃Man man = new Man();Fruit fruit = new Fruit("apple");fruit.getEated(man);
super
super是关键字。表示当前类父类的引用。
super使用场景一- 在子类中访问父类的方法或属性
public class Animal {public void eat() {System.out.println("Animal eat");}} public class Dog extends Animal {public void eat() {System.out.println("Dog eat");}public void tryeat() {super.eat();}}
Super使用场景二
- 在子类的构造器中,调用父类的构造器
public class Animal {public Animal() {System.out.println("Animal Constructor");}} public class Dog extends Animal {public Dog(String name) {System.out.println("Dog Constructor");}public Dog() {super();}}
如果一个类中不写任何构造器,相当于
public Cat() {super();}
如果写了构造器,但其中不写任何super的东西 相当于在第一行插入
super();