(Person)o.getName() 和 ((Person)o).getName() 之间的区别

Difference between (Person)o.getName() and ((Person)o).getName()

我有class个人:

class Person{
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

,我想这样做:

public static void main(String[] args) {
    Object o = new Person("Person a");
    String personName = (Person)o.getName();
}

我得到的是编译错误:无法解析 'Object' 中的方法 'getName'。当我从技术上将 o 转换为 Person 时,它如何不起作用?

经过一些试验,我将代码更改为 String personName = ((Person)o).getName();,编译正常。不幸的是,我仍然不明白它与之前的尝试有何不同。

在下面的语句中

(Person)o.getName();

o.getName() returns a String 你正试图将其转换为 Person 因此即使 o 有一个名为String getName() 在您的情况下无论如何都不存在,因为 oObject.

的引用

在下面的语句中

((Person)o).getName();

您正在将 o 转换为 Person,然后通过调用 getName() 从中获取名称,。

转换运算符的优先级低于方法调用。

((Person)o).getName() 表示您将 o 转换为 Person,然后对其调用 getName()
(Person)o.getName() 表示您在 o 上调用 getName(),然后将结果转换为 Person。由于 o 是一个 Obejct 并且没有 getName() 方法,因此这行代码无法编译。