Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在方法中强制转换参数-Java_Java_Casting - Fatal编程技术网

在方法中强制转换参数-Java

在方法中强制转换参数-Java,java,casting,Java,Casting,假设我有一门课叫机器人。在Robot类中,我有一个子类叫做Racer。游泳者和跑步者这两个子类都扩展了Racer Racer(及其所有子项)有一个名为sprint()的方法 在另一个类中,我编写了一个名为race的静态类方法,它接受一个Racer参数(或其任何子类)。在race方法中,我使用了sprint方法,这也是Racer及其孩子所独有的 代码运行成功,但是如果我想通过sprint方法传递Robot参数呢?有什么代码可以让我把机器人变成赛车手 我试着去做 publicstaticvoidra

假设我有一门课叫机器人。在Robot类中,我有一个子类叫做Racer。游泳者和跑步者这两个子类都扩展了Racer

Racer(及其所有子项)有一个名为sprint()的方法

在另一个类中,我编写了一个名为race的静态类方法,它接受一个Racer参数(或其任何子类)。在race方法中,我使用了sprint方法,这也是Racer及其孩子所独有的

代码运行成功,但是如果我想通过sprint方法传递Robot参数呢?有什么代码可以让我把机器人变成赛车手

我试着去做

publicstaticvoidrace((Racer)机器人arg){
//这里的比赛方法
}


但它没有起作用。有什么想法吗?

方法参数不能进行类型转换。您可以将super类作为参数,以便在方法内部可以基于运行时对象进行类型转换。

race(…)
中,对于非赛车手的机器人,您会做什么?
公共静态void race(robot arg){((racer)arg).sprint();}
。如果您传递的
机器人
不是
赛车手
,它将崩溃并烧坏,因此为什么要放弃阻止这种情况发生的编译器类型检查?如果该方法被编写为采用
赛车手
,那么它必须接收对该类型实例的引用。缩小引用转换(“向下投射”)是一件人们不应该(几乎)做的事情。您的演员阵容a)可能不起作用,因为
机器人
不一定是
赛车手
,b)在“a”的情况下,应该防止
类卡斯特例外
,或者不太希望捕获并处理异常。然而,最好的方法是不要悲观。编写方法以获取实际计划传递给它的参数类型。语法是什么?可以创建Robot类作为接口,并给出一个抽象方法。创建一个实现Robot类的类,然后重写抽象方法。公共接口Robot{public void sprint();}公共类Racer实现Robot{public void sprint(){System.out.println(“abc”);}}公共类测试{公共静态void race(Robot arg){arg.sprint();}