我发现了一个类似的问题,但是它并没有真正涉及到界面问题-Issue about casting object brackets
public class Speak { /* Line 1 */
public static void main(String[] args) { /* Line 2 */
Speak speakIT = new Tell(); /* Line 3 */
Tell tellIt = new Tell(); /* Line 4 */
speakIT.tellItLikeItIs(); /* Line 5 */
(Truth)speakIt.tellItLikeItIs(); /*Line 6 */
((Truth)speakIt).tellItLikeItIs(); /* Line 7 */
tellIt.tellItLikeItIs(); /* Line 8 */
(Truth)tellIt.tellItLikeItIs(); /* Line 9 */
((Truth)tellIt).tellItLikeItIs(); /* Line 10 */
}
}
class Tell extends Speak implements Truth {
public void tellItLikeItIs() {
System.out.println("Right on!");
}
}
interface Truth {
public void tellItLikeItIs()
}
第7、8和10行是正确的。我得到数字7,但是为什么数字6和9正确而不是8和10?以及我们如何显式转换为接口?在答案8和10的括号后面使用什么逻辑?
最佳答案
(Truth) tellIt.tellItLikeItIs()
调用
tellItLikeItIs()
对象上的tellIt
,并将此方法返回的值强制转换为Truth
。((Truth) tellIt).tellItLikeItIs()
将
tellIt
强制转换为Truth
,然后在对象上调用tellItLikeItIs()
。