Super关键字:
Super关键字的特点:
This 与super 不能同时存在第一行;
构造方法第一行都有一个默认语句 super()无参构造;
私有化后显示定义无法在用默认,
空参时先调父类构造在子类构造,因为默认语句 super()
第一行只要this在就没有super.
super的调用:
super:代表当前对象父类的引用
super.成员变量 调用父类的成员变量
super(…) 调用父类的构造方法
super.成员方法 调用父类的成员方法
//定义Person类,将Student和Worker共性抽取出来 class Person { private String name; private int age; public Person(String name, int age) { // super(); this.name = name; this.age = age; } 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; } }
//Student extends Person class Student extends Person { // Student类的构造方法 Student(String name, int age) { // 使用super关键字调用父类构造方法,进行相应的初始化动作 super(name, age); } public void study() {// Studnet中特有的方法 System.out.println(this.getName() + "同学在学习"); } }
//Worker extends Person class Worker extends Person { Worker(String name, int age) { // 使用super关键字调用父类构造方法,进行相应的初始化动作 super(name, age); } public void work() {// Worker 中特有的方法 System.out.println(this.getName() + "工人在工作"); } }
//测试 public class Test { public static void main(String[] args) { Student stu = new Student("小明",23); stu.study(); Worker w = new Worker("小李",45); w.work(); }
This()是调用自己其他的构造函数,Super()是调用自己继承的父类的构造函数“,
如果只想调用默认无参数的父类构造函数,不用在子类的构造函数当中写出来,但是实际编程的时候,总是会忽略这一点。
那门这两个关键字能不能同时出现在子类的一个构造函数当中吗?答案肯定是不能
原因:This 与super 不能同时存在第一行;JAVA 中规定使用 this 和 super 时必须放在构造函数第一行