super关键字使用:
1、super可以理解为:父类的
2、super可以用来调用:属性、方法、构造器
super的使用:
1、可以在子类的方法或构造器中,通过使用“super.属性”或"super.方法"的方式,显示的调用父类声明的属性或方法,但通常情况下,都会省略"super."
2、当子类和父类定义了同名的属性时,如果需要在子类中调用父类中声明的属性,则必须使用“super.属性”的方式,表明调用的是父类中声明的属性,
日常开发中,不建议在子类中定义父类中同名的属性。
3、子类重写父类方法后,在子类中想调用父类中被重写的方法,必须显示的使用“super.方法”的方式,表明调用的是父类中的方法。
super调用构造器
1、在子类的构造器中显示的使用“super(形参列表)”的方式,调用父类中声明的指定的构造器
2、“super(形参列表)”使用时,必须在子类构造器的首行
3、类的构造器中,针对于“this(形参列表)”或“super(形参列表)”,只能二选一,不可以同时出现
4、在构造器首行,没有显示的声明--“this(形参列表)”或“super(形参列表)”,则默认调用的是父类中空参的构造器--super();
5、在类的多个构造器中,至少有一个类的构造器使用了“super(形参列表)”,调用父类的构造器。
代码实例:
父类:
public class Person {
String name;
int age;
int id = 100;//身份证号
public Person() {
System.out.println("default super()");
}
public Person(String name) {
this.name = name;
}
public Person(String name,int age) {
this(name);
this.age = age;
}
public void eat() {
System.out.println("people can eat");
}
public void sleep() {
System.out.println("people can sleep");
}
}
子类:
public class Student extends Person{
String major;
intid=200;//学号
public Student(String major) {
super();
this.major = major;
}
public Student(String name, int age, String major) {
// this.name = name;
// this.major = major;
super(name, age);//表示调用的是父类的构造器
}
public Student() {
super();
}
public void eat() {
System.out.println("students should eat more fruit and vegetables");
}
public void study() {
System.out.println("students should study");
System.out.print("this.eat(): ");
this.eat();
System.out.print("super.eat(): ");
super.eat();
}
public void show() {
//name和age省略了this.,this.name和super.age指向的都是父类的变量
System.out.println("super.id: name = " + this.name + " , age = " + super.age + " , id = " + super.id);
System.out.println("this.id: name = " + this.name + " , age = " + super.age + " , id = " + id);
}
}
测试类:
public class SuperTest {
public static void main(String[] args) {
Student s = new Student();//default super()
System.out.println("********************");
s.show();
s.study();
System.out.println("********************");
Student s1 = new Student("Jerry", 12, "math");
s1.show();
System.out.println("********************");
Student s2 = new Student();//default super()
}
}
输出:
default super()
********************
super.id: name = null , age = 0 , id = 100
this.id: name = null , age = 0 , id = 200
students should study
this.eat(): students should eat more fruit and vegetables
super.eat(): people can eat
********************
super.id: name = Jerry , age = 12 , id = 100
this.id: name = Jerry , age = 12 , id = 200
********************
default super()