super:可以用来修饰属性、方法、构造器
1)当子类与父类中有同名的属性时,可以通过“super.此属性”显式的调用父类中声明的属性。
若想调用子类的同名的属性“this.此属性” 。
2)当子类重写父类的方法以后,在子类中若想再显式的调用父类被重写的方法,就需要使用“super.方法”。
3)super修饰构造器,通过在子类中使用“super(形参列表)”来显式的调用父类中指定的构造器。
>在构造器内部,“super(形参列表)”必须要在首行!
>在构造器内部,“this(形参列表)”或“super(形参列表)”只能出现一个!
>当构造器中,不显式地调用“this(形参列表)或”super(形参列表)“其中任何一个,默认调用的是父类空参额构造器!
建议:设计一个类时,尽量要提供一个空参的构造器!
代码示例:
public class Person { protected String name; protected int age; int id = 1001; public Person() { } 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 int getId() { return id; } public void setId(int id) { this.id = id; } public void eat(){ System.out.println("吃饭"); } public void walk(){ System.out.println("走路"); } } public class Student extends Person { String schoolName; int id = 1002; public void show() { System.out.println(this.id); System.out.println(super.id); super.walk(); } public void eat() { System.out.println("学生在吃饭"); } public void info() { this.eat(); super.eat(); } public String getSchoolName() { return schoolName; } public void setSchoolName(String schoolName) { this.schoolName = schoolName; } public int getId() { return id; } public void setId(int id) { this.id = id; } } public class TestMain { public static void main(String[] args) { Student student = new Student(); student.show(); student.info(); } }
结果:
1002
1001
走路
学生在吃饭
吃饭