理解:super = 父类的
super可以用来调用的结构:
-
属性:通常我们在子类中使用“super.属性”的方式,显示的调用父类中声明的属性,一般情况下可以省略,但是当子类和父类中声明了同名的属性时,super则不能省。
-
方法:通常我们在子类中使用“super.方法”的方式,显示的调用父类中声明的方法,一般情况下可以省略;但当子类重写了父类中的方法以后,我们想在子类的方法中调用父类中被重写的方法时,则必须显式的使用"super.方法"的方式,表明调用的是父类中被重写的方法。
-
构造器:通常我们在子类的构造器首行显式的使用"super(形参列表)"的方式,调用父类中声明的指定的构造器,当首行没有显示的声明"this(形参列表)“或"super(形参列表)”,则默认调用的是父类中空参的构造器:super();且在类的构造器中,针对于“this(形参列表)”或“super(形参列表)”只能二选一,不能同时出现。
package com.ashley.superfield;
public class Person {
String name;
int age;
int id = 123456;//身份证号码
public Person() {
}
public Person(String name) {
this.name = name;
}
public Person(String name, int age) {
this(name);
this.age = age;
System.out.println("姓名为:" + name + ", 年龄为:" + age);
}
public void eat() {
System.out.println("人,吃饭");
}
public void walk() {
System.out.println("人,走路");
}
}
package com.ashley.superfield;
public class Student extends Person {
String major;
int id = 1001;//学号
public Student() {
}
public Student(String major) {
super("Tom", 20);//调父类构造器
System.out.println(major);
}
@Override
public void eat() {
System.out.println("学生多吃有营养的食物");
}
public void study() {
System.out.println("学生学习知识");
}
public void show() {
System.out.println(this.id);
System.out.println(super.id);//调父类属性
this.eat();
super.eat();//调父类方法
}
}
package com.ashley.superfield;
public class SuperTest {
public static void main(String[] args) {
Student student = new Student();
student.show();
Student student1 = new Student("计算机");
}
}