super 关键字的使用:
1.super 可以理解为 父类的;this可以理解为当前对象
2.super 可以调用父类的属性和方法 构造器 this 可以用来修饰:属性,方法、构造器;
3.super 的使用:
3.1 我们可以在子类的方法或者构造器中,通过super.属性或者super.方法的方式,
显示调用父类中声明的属性或者方法,但是通常我们习惯省略super。
3.2 特殊情况:当子类和父类中定义了同名的属性时,我们要想在子类中调用父类的属性,则必须显示使用super.属性;
3.3 当子类重写了父类中的方法以后,想要在子类中调用父类被重写的方法时,则需要使用 super.方法的方式,
表名调用的是父类被重写的方法,否则默认调用子类重写的方法;
4.super 调用构造器:
4.1 我们可以在子类的构造器中显示使用“super(形参列表)”的方式,调用父类中声明的指定构造器
4.2 “super(形参列表)”的使用,必须声明在子类构造器中的首行;原因是,需要先保证父类的初始化
4.3 我们在类的构造器,针对于 “this(形参列表)”或者 “super(形参列表)”只能二选一;
4.4,在构造器的首行没有显示声明“this(形参列表)”或者 “super(形参列表)”,默认调用的是super();
4.5 在类的多个构造器中,至少有一个构造器使用的“super(形参列表)”调用父类构造器;
问题引入:子类重写父类方法以后,还想使用父类的被重写的方法,则可以使用super;
1 public class Day12Super13 { 2 public static void main(String[] args) { 3 Student3 student = new Student3("tom",12,"IT"); 4 student.show(); 5 Student3 student1 = new Student3(); 6 } 7 } 8 class Persons3{ 9 String name; 10 int age; 11 int id = 1001;//身份证号 12 13 public Persons3() { 14 System.out.println("我无处不在"); 15 } 16 public Persons3(String name, int age) { 17 this.name = name; 18 this.age = age; 19 } 20 21 public void eat() { 22 System.out.println("吃饭"); 23 } 24 public void walk() { 25 System.out.println("走了"); 26 } 27 } 28 29 class Student3 extends Persons3{ 30 String major; 31 int id = 1002;//学号 32 33 public Student3(String major) { 34 this.major = major; 35 } 36 public Student3(String name,int age,String major) { 37 super(name,age); 38 this.major = major; 39 } 40 41 public Student3() { 42 } 43 44 @Override 45 public void eat() { 46 // TODO Auto-generated method stub 47 //super.eat(); 48 System.out.println("学生多吃有营养的食物"); 49 } 50 51 public void study() { 52 System.out.println("学生学习"); 53 } 54 55 public void show() { 56 System.out.println("name:"+this.name+",age:"+super.age+",身份证号:"+super.id+",学号:"+this.id); 57 } 58 59 }
这里Students3的初始化 Student3 student1 = new Student3();,会打印“我无处不在”;
所以换句话说,我们通过子类的构造器创建子类对象是,我们一定会直接或者间接调用父类构造器,进而调用父类的父类的构造器,直到调用到Object中空参的构造器为止,正因为加载过所有的父类结构,所以才可以看到内存中父类中的结构,子类对象才可以考虑进行调用;
也就是说,子类继承父类以后,就获取了父类的属性和方法; 创建子类对象,在堆空间中,就会加重所有父类中声明的属性;这也是对象实例化的过程;