MST

星途 面试题库

面试题:Java抽象类示例代码解读相关 - 方法重写考察

以下是一段Java抽象类的示例代码: abstract class Shape { abstract double calculateArea(); } class Circle extends Shape { private double radius; public Circle(double radius) { this.radius = radius; } @Override public double calculateArea() { return Math.PI * radius * radius; } } 请解释在Circle类中重写calculateArea方法的必要性以及@Override注解的作用。
41.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 重写calculateArea方法的必要性
    • Shape类是一个抽象类,其中定义了抽象方法calculateArea。抽象方法只有方法声明,没有方法体,它的具体实现需要由继承自该抽象类的子类来完成。
    • Circle类继承自Shape类,根据Java的规则,非抽象子类必须为继承的抽象方法提供具体的实现。如果Circle类不重写calculateArea方法,那么Circle类也必须被声明为抽象类,这样就无法创建Circle类的实例对象。通过重写calculateArea方法,Circle类才能给出计算自身面积(圆面积)的具体逻辑,即Math.PI * radius * radius,从而使Circle类成为一个可实例化的具体类,能够满足实际应用中计算圆面积的需求。
  2. @Override注解的作用
    • 编译器检查@Override注解用于告知编译器,被注解的方法意图是重写父类中的方法。编译器会进行检查,如果父类中不存在对应的方法声明,编译器会报错。例如,如果在Circle类中误写方法名,如public double calculateAreaa() (方法名拼写错误)并使用@Override注解,编译器会发现父类Shape中没有calculateAreaa方法,从而提示错误,帮助开发者发现代码中的错误。
    • 增强代码可读性:从代码阅读角度,@Override注解明确标识了该方法是重写自父类的方法,使得代码结构更加清晰,便于其他开发者理解代码的继承和重写关系,提高代码的可维护性。