Java父类的父类super
简介
在Java中,我们经常会使用继承来实现代码的重用和扩展。继承允许我们定义新类,并从现有类继承属性和方法。在继承层次结构中,我们可以使用关键字super
来访问父类的成员。但是,你可能不知道的是,父类也可以有它自己的父类,我们可以使用super
来访问父类的父类。
在本文中,我们将详细介绍Java中父类的父类的概念,以及如何使用super
关键字访问它们。
父类和子类
在Java中,通过使用关键字extends
,我们可以创建一个子类来继承一个父类的属性和方法。子类继承了父类的非私有成员(属性和方法),并且还可以添加自己的成员。
下面是一个简单的示例,展示了一个父类Animal
和一个子类Dog
的关系:
class Animal {
String name;
Animal(String name) {
this.name = name;
}
void sound() {
System.out.println("The animal makes a sound");
}
}
class Dog extends Animal {
String breed;
Dog(String name, String breed) {
super(name);
this.breed = breed;
}
void sound() {
System.out.println("The dog barks");
}
void displayInfo() {
System.out.println("Name: " + name);
System.out.println("Breed: " + breed);
}
}
在上面的示例中,Animal
类是父类,Dog
类是子类。Dog
类继承了Animal
类的属性和方法,并且还添加了自己的属性和方法。
使用super
关键字访问父类的成员
当我们在子类中重写父类的方法时,可以使用super
关键字来调用父类的方法。同样,我们也可以使用super
关键字来访问父类的成员变量。
下面是一个示例,展示了如何使用super
关键字访问父类的成员变量和方法:
class Animal {
String name;
Animal(String name) {
this.name = name;
}
void sound() {
System.out.println("The animal makes a sound");
}
}
class Dog extends Animal {
String breed;
Dog(String name, String breed) {
super(name);
this.breed = breed;
}
void sound() {
super.sound();
System.out.println("The dog barks");
}
void displayInfo() {
System.out.println("Name: " + super.name);
System.out.println("Breed: " + breed);
}
}
在上面的示例中,Dog
类重写了父类的sound()
方法,并使用super.sound()
调用了父类的sound()
方法。同样,displayInfo()
方法使用super.name
访问了父类的name
成员变量。
父类的父类
在Java中,一个类可以继承另一个类,而另一个类本身也可以继承另一个类。这种继承关系可以一直延伸下去,形成一个继承层次结构。在这种情况下,一个类的父类也可以有它自己的父类,我们可以使用super
关键字来访问父类的父类。
下面是一个示例,展示了一个父类Animal
和一个子类Dog
的继承关系,以及父类Animal
的父类LivingBeing
:
class LivingBeing {
String kingdom;
LivingBeing(String kingdom) {
this.kingdom = kingdom;
}
void breathe() {
System.out.println("The living being breathes");
}
}
class Animal extends LivingBeing {
String name;
Animal(String name) {
super("Animalia");
this.name = name;
}
void sound() {
System.out.println("The animal makes a sound");
}
}
class Dog extends Animal {
String breed;
Dog(String name, String breed) {
super(name);
this.breed = breed;