我发现了一个类似的问题,但是它并没有真正涉及到界面问题-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()

10-02 08:05