this关键字:
构造方法之间的调用,可以通过this关键字来完成。只能在本类中构造方法里用,也只能调用构造方法。不能用在普通方法。
this(参数列表);
调用其他构造方法的语句必须定义在构造方法的第一行,原因是初始化动作要最先执行。
可以在成员变量名前面加上this.来区别成员变量和局部变量。
public class Person { private String name; private int age; //调用本类成员:this.成员(属性/方法) //构造方法之间的调用:this(参数列表) //注意事项:构造方法中的this()必须放在第一行,否则报错 public Person(){ this("小红",18); } public Person(String name,int age){ this.name=name; this.age=age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
public class Demo01 { public static void main(String[] args) { Person p=new Person(); System.out.println(p.getName()); } }
super关键字:
1、在创建子类对象时,父类的构造方法会先执行,因为子类中所有构造方法的第一行有默认的隐式super();语句。
2、当子类调用父类的构造方法时,用super();
3、this调用了本类其他构造方法,那么super调用父类的语句没有的,因为初始化动作要先执行。主要在构造方法中直接或者间接的调用super()就可以完成初始化。(在开始的位置写本类的,在后面的方法中的调父类的)。
4、Java体系在设计,定义了一个所有对象的父类Object。
解决this和super谁在第一行的问题 间接的方式分开
public class Zi extends Fu{ //在子类中用super.成员(方法/属性)调用父类成员 //在子类构造方法中用super(实参)调用父类构造方法 //注意事项:显示指定super()必须放在构造方法第一行 public Zi(){ //每个类中的构造方法默认第一行都有 //super(); //调用父类构造方法 //super("小红帽"); } public Zi(String name){ super("小红帽"); //super(); } }