1 super访问构造函数
在继承中,子类的构造函数必须依赖父类提供的构造函数 super(参数列表) 访问父类的构造函数 super 调用父类的构造函数,必须在子类构造函数的第一行
//父类
public class Person{
public Person(){}
}
//子类
public class Student extends Person{
public Student(){
super();
}
}
在继承中,子类的构造函数必须依赖父类提供的构造函数
//父类中只有带参构造方法
public class Base {
String name;
int age;
public Base(String name, int age){
}
}
//子类构造方法必须依赖父类
public class Son extends Base{
public Son(){
//如果父类提供的只有带参构造方法,子类的构造方法必须依赖父类提供的现有构造方法;
//使用super(参数列表)去访问父类提供的构造函数,且必须明确写出参数;
//super必须在第一行
super("张三", 20);
}
}
2 super访问父类的属性
在子类的方法或构造器中,通过使用 super.属性 来访问父类属性 应用场景: 当子类和父类中定义了同名的属性时,想要调用父类中声明的属性,需要通过 super.属性 的方式来表明调用的是父类中声明的属性。
public class Car{
//车架号
int id;
}
class Benz extends Car{
//内部车辆编号
int id;
public void showInfo(){
System.out.println("车架号是:" + super.id + " 内部车辆编号:" + id);
}
}
3 super访问父类的方法
在子类的方法或构造器中,通过使用 super.方法名 来调用父类的方法
public class Car{
public void drive(){
System.out.println("驾驶");
}
}
class Benz extends Car{
public Benz(){
//访问父类方法
super.drive();
}
}
4 super和this的区别
super() 是调用父类的构造函数,必须在构造函数的第一行
this() 是调用本类的构造函数,必须在构造函数的第一行
super() 和 this() 在同一个构造方法中,不能同时出现
super | this | |
代表对象 | 代表父类对象的引用 | 当前对象本身 |
前置 | 只有在继承条件下才能使用 | 没有继承也可以使用 |
构造方法 | 父类构造 | 本类构造 |