考虑以下Java代码,该代码定义了一个接口`Shape`和一个实现该接口的类`Circle`,以及一个`main`方法: ```java interface Shape { double getArea();} class Circle implements Shape { private double radius; public Circle(double radius) { this.radius = radius; } public double getArea() { return Math.PI * radius * radius; }} public class MainClass { public static void main(String[] args) { Shape shape = new Circle(5); System.out.println(shape.getArea()); }}``` 当运行此代码时,以下哪个描述最准确?
答案解析
核心考点:接口、多态、方法重写。
解题思路分析:接口不能被直接实例化,但可以声明一个接口类型的变量,该变量可以引用实现了该接口的类的实例。在代码中,`Shape shape = new Circle(5);` 是合法的,因为`Circle`类实现了`Shape`接口。`shape.getArea()` 实际调用的是`Circle`类中的`getArea()` 方法,因为在运行时,`shape`指向的是 `Circle` 的实例。选项A是错误的,因为虽然不能直接实例化接口,但是可以指向实现类的对象。选项B是错误的,因为代码符合Java的语法规则,不会产生异常。选项C是正确的,代码会成功执行,并输出`Circle`对象的面积计算结果。选项D是错误的,因为`Shape`接口中并没有默认实现,`Circle`类实现了接口,并重写了`getArea()`方法。
选项A分析:接口不能直接实例化,但可以指向其实现类对象。
选项B分析:代码可以正确执行,不会抛出运行时异常。
选项C分析:代码会正确计算并输出`Circle`实例的面积。
选项D分析:接口本身没有实现,`Circle`类重写了接口中的方法。
易错点提醒:理解接口的引用和多态特性。接口类型变量可以引用实现类的对象,并且在调用接口方法时会发生多态行为,最终执行的是实际对象的方法。
正确答案:C