super(parameter-list);其中,parameter-list 指定了父类构造方法中的所有参数。super( ) 必须是在子类构造方法的方法体的第一行。
public class Person { public Person(String name) { } } public class Student extends Person { }会发现 Student 类出现编译错误,提示必须显式定义构造方法,错误信息如下:
Implicit super constructor Person() is undefined for default constructor. Must define an explicit constructor
在本例中 JVM 默认给 Student 类加了一个无参构造方法,而在这个方法中默认调用了 super(),但是 Person 类中并不存在该构造方法,所以会编译错误。public class Person { public Person(String name, int age) { } public Person(String name, int age, String sex) { } }子类 Student 继承了 Person 类,使用 super 语句来定义 Student 类的构造方法。示例代码如下:
public class Student extends Person { public Student(String name, int age, String birth) { super(name, age); // 调用父类中含有2个参数的构造方法 } public Student(String name, int age, String sex, String birth) { super(name, age, sex); // 调用父类中含有3个参数的构造方法 } }从上述 Student 类构造方法代码可以看出,super 可以用来直接调用父类中的构造方法,使编写代码也更加简洁方便。
super();
来调用父类的无参构造方法,必须写在子类构造方法的第一句,也可以省略不写。通过 super 来调用父类其它构造方法时,只需要把相应的参数传过去。super.member其中,member 是父类中的属性或方法。使用 super 访问父类的属性和方法时不用位于第一行。
class Person { int age = 12; } class Student extends Person { int age = 18; void display() { System.out.println("学生年龄:" + super.age); } } class Test { public static void main(String[] args) { Student stu = new Student(); stu.display(); } }输出结果为:
学生年龄:12
在上面的例子中,父类和子类都有一个成员变量 age。我们可以使用 super 关键字访问 Person 类中的 age 变量。class Person { void message() { System.out.println("This is person class"); } } class Student extends Person { void message() { System.out.println("This is student class"); } void display() { message(); super.message(); } } class Test { public static void main(String args[]) { Student s = new Student(); s.display(); } }输出结果为:
This is student class
This is person class
如果构造方法的第一行代码不是 this() 和 super(),则系统会默认添加 super()。
this.
进行区分。// 父类Animal的定义 public class Animal { public String name; // 动物名字 } //子类Cat的定义 public class Cat extends Animal { private String name; // 名字 public Cat(String aname, String dname) { super.name = aname; // 通过super关键字来访问父类中的name属性 this.name = dname; // 通过this关键字来访问本类中的name属性 } public String toString() { return "我是" + super.name + ",我的名字叫" + this.name; } public static void main(String[] args) { Animal cat = new Cat("动物", "喵星人"); System.out.println(cat); } }上述代码演示了使用 super 关键字访问父类中与子类同名的成员变量 name,this 关键字访问本类的 name 变量。运行程序,输出结果如下:
我是动物,我的名字叫喵星人
本文链接:http://task.lmcjl.com/news/10607.html