在Java中,如果一个类`Shape`包含一个实例方法`calculateArea()`,并且类`Circle`继承自`Shape`,同时`Circle`也定义了自己的`calculateArea()`方法(覆盖了父类方法)。假设有一个指向`Circle`实例的`Shape`类型的引用`myShape`,那么调用`myShape.calculateArea()`时,会执行哪个方法?
答案解析
在Java中,当使用父类类型的引用指向子类对象并调用被子类覆盖的方法时,会发生多态行为。这意味着实际执行的方法是子类中覆盖后的方法。选项A错误,因为实际执行的是子类方法而非父类方法。选项B正确,由于`myShape`实际指向一个`Circle`对象,且`Circle`重写了`calculateArea()`方法,所以最终执行的是子类的方法。选项C错误, Java 方法调用是在运行时根据实际对象类型而非引用类型决定的,是动态绑定,并非编译时。选项D错误,方法是静态还是实例方法并不影响多态的行为,多态发生在子类重写父类实例方法时。
正确答案:B