小编典典

Java:从超类变量调用子类方法

java

一本书的引用:

如果要从超类的变量引用的对象中调用由子类定义的方法,该怎么办?假定SoftBall类具有一个名为BallBall类未定义的方法riseBall。如何从Ball变量中调用它?一种方法是创建子类的变量,然后使用赋值语句强制转换对象:

Ball b = new SoftBall();
SoftBall s = (SoftBall)b;
// cast the Ball to a
// SoftBall
s.riseBall();

在上面的代码片段中,它显示了一个新的 Softball 对象,该对象正在创建并分配为对变量 b 的引用,这是完全合法的,因为类
SoftballBall 类的子类。然而,报价状态(间接),你必须转换的变量输入 垒球 之前,您可以使用变量来调用这些方法 垒球
类。这是为什么?为什么我不能直接使用 Ball 类型的变量b (包含对垒球对象的引用)来调用所需的方法?变量 b 已经具有对象。


阅读 377

收藏
2020-11-23

共1个答案

小编典典

Java是一种静态类型的语言。

这意味着编译器将检查变量的类型是否具有您尝试调用的方法。

变量的类型bBallBall没有riseBall方法。

这意味着您的代码将崩溃,除非b在运行时碰巧包含一个Softball(编译器无法保证)。您可能知道它确实如此,但是您也必须说服编译器(即为变量提供必要的类型)。

2020-11-23