MST
星途 面试题库

面试题:Java抽象类示例代码解读相关 - 抽象类构造函数与继承

假设我们有如下Java抽象类和继承它的子类代码: abstract class Animal { protected String name; public Animal(String name) { this.name = name; } abstract void makeSound(); } class Dog extends Animal { public Dog(String name) { super(name); } @Override void makeSound() { System.out.println("Woof!"); } } 如果在抽象类Animal中添加一个抽象方法getInfo,并且要求在Dog类中实现该方法返回狗的名字和叫声信息,应该如何修改代码?同时解释抽象类构造函数在继承体系中的作用。
41.0万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 修改代码如下
    • 修改Animal抽象类,添加getInfo抽象方法:
abstract class Animal {
    protected String name;
    public Animal(String name) {
        this.name = name;
    }
    abstract void makeSound();
    // 添加抽象方法getInfo
    abstract String getInfo(); 
}
- 修改`Dog`类,实现`getInfo`方法:
class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }
    @Override
    void makeSound() {
        System.out.println("Woof!");
    }
    @Override
    String getInfo() {
        // 实现getInfo方法,返回狗的名字和叫声信息
        return "Name: " + name + ", Sound: Woof!"; 
    }
}
  1. 抽象类构造函数在继承体系中的作用
    • 初始化成员变量:抽象类的构造函数用于初始化抽象类中定义的成员变量。例如在上述代码中,Animal类的构造函数public Animal(String name)用于初始化name成员变量。这样,当子类创建对象时,通过super关键字调用抽象类构造函数,可以确保抽象类中的成员变量被正确初始化,为子类对象的创建奠定基础。
    • 保证继承体系的一致性:它确保了整个继承体系中对象创建的一致性。所有继承自该抽象类的子类,在创建对象时,都会首先调用抽象类的构造函数,按照抽象类设定的方式初始化部分状态,使得子类对象在创建时具备抽象类定义的基本属性和状态,从而保证了继承体系中对象状态的一致性和完整性。