super 和 this 的使用
public class father{
//父类
protected String name = "小明";
public father(){
super();//他的父类是Object类
}
public father(String name){
this.name = name;
}
private void hello(){
System.out.println("hello");
}
}
public class son extends father{
//子类
public String name = "李华";
public son(){
super();//他的父类是father,默认代码,不写也不会报错
}
public son(String name){
this.name = name;
}
public void test2(){
this.test();
//super.hello();//会报错,不能使用父类中private的属性或方法
}
public void test(String name){
System.out.print(name);
System.out.print(this.name);
System.out.print(super.name);
}
}
public static void main(String[] args){
Son son = new son();
son.test("海王");
}
输出:
海王
李华
小明
结论:
子类通过继承父类,可以使用父类的相关属性和方法
值得注意的是:
- 子类不能继承父类private的属性或者方法;
- 使用super()调用父类的构造方法时,必须在构造方法的第一行
- super必须出现在子类的方法或构造方法中(注:构造参数中默认隐藏代码
super();
,当父类只有有参构造方法、没有无参构造方法的时候,子类调用super()的时候要加上参数才不报错,所以父类中写完有参构造后,最好加上无参构造,或者使用@lambok
注解); - this:没有继承也可以使用,指代本类的属性或方法;
- super:代表父类对象的应用,只有在继承下才可以使用;
- super 和 this 不用同时调用构造方法;
总结不对或者不足的地方,欢迎各位大牛指正。