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;