Super的详解
注意点:
- super调用父类的构造方法,必须在构造方法中的第一个
- super必须只能出现在子类的方法或者构造方法中
- super和this 不能同时调用构造方法
和this的不同点
- 代表的对象不同:
this:本身调用者这个对象
super:代表父类对象的应用
- 前提
this:没用继承也可以使用
super:只能在继承条件才可以使用
- 构造方法
this:本类的构造
super:父类的构造
java
package Demo01;
//在java中所有的类都默认直接或者间接继承object类
//子类可以使用父类的全部方法
public class Person {
protected String name="父类";
public Person(){
System.out.println("父类无参");
}
}
java
package Demo01;
public class Student extends Person{
public String name="子类";
public Student(){
//这边存在一个隐藏代码super()调用了父类的无参,并且只能在第一行
//父类若没有无参则子类无参报错无法运行
//除非自己写super()去调用父类有参构造
System.out.println("子类无参");
}
public void test1(String name){
System.out.println(name);
System.out.println(this.name);
System.out.println(super.name);
}
}
java
package Demo01;
//一个项目应该只存一个main方法
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.test1("测试");
}
}
输出的结果为:
父类无参
子类无参
测试
子类
父类
类Application中第一个实例化也实现了无参构造的运行,证明了运行子类的无参构造会先执行父类的无参构造。下一行的test1方法中,测试直传递参数,this和super的区别,结果显示this是调用本类的属性而super调用的是父类的属性。