super关键字
super关键字用于访问父类的成员
具体用法
- 使用super关键字调用父类的成员变量和成员方法
class Animal{
String name = "动物";
void shout() {
System.out.println("动物发出的叫声");
}
}
// 定义Dog类继承Animal类
class Dog extends Animal{
String name = "犬类";
// 重写父类的shout方法
void shout() {
super.shout();
}
void printname() {
System.out.println(super.name);
}
}
public class Example {
public static void main(String[] args) {
Dog dog = new Dog();
dog.shout();
dog.printname();
}
}
- 使用super关键字调用父类的构造方法
class Animal{
String name = "动物";
public Animal() {
System.out.println("父类的构造方法");
}
void shout() {
System.out.println("动物发出的叫声");
}
}
// 定义Dog类继承Animal类
class Dog extends Animal{
String name = "犬类";
// 定义子类的构造方法去调用父类的构造方法
public Dog() {
super();
}
// 重写父类的shout方法
void shout() {
super.shout();
}
void printname() {
System.out.println(super.name);
}
}
public class Example {
public static void main(String[] args) {
Dog dog = new Dog();
dog.shout();
dog.printname();
}
}
注意:
- 通过super调用父类的构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次。
- 在子类的构造方法中必须调用父类的构造方法,不显示的调用父类的构造方法,系统就默认加上一个super默认调用父类无参的构造方法。
- 如果子类中无参的构造方法中有this()则不能显示的写出super()但实际中子类的构造方法一定会调用父类的某个构造方法。
class Animal{
String name = "动物";
public Animal() {
System.out.println("父类的构造方法");
}
void shout() {
System.out.println("动物发出的叫声");
}
}
// 定义Dog类继承Animal类
class Dog extends Animal{
String name = "犬类";
// 定义子类的构造方法去调用父类的构造方法
public Dog(String name) {
this.name=name;
}
public Dog() {
this("lihua");
}
// 重写父类的shout方法
void shout() {
super.shout();
}
void printname() {
System.out.println(super.name);
}
}
public class Example {
public static void main(String[] args) {
Dog dog = new Dog();
dog.shout();
dog.printname();
}
}
父类的构造方法
动物发出的叫声
动物