(person)o.getname()和((person)o.getname()之间的区别

ykejflvf  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(338)

我有一个班的人:

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”。当我在技术上铸造时它怎么不起作用 oPerson ?
经过一番试验,我把代码改为 String personName = ((Person)o).getName(); ,编译得很好。不幸的是,我仍然不明白这和以前的尝试有多大的不同。

xfyts7mz

xfyts7mz1#

cast运算符的优先级低于方法调用的优先级。 ((Person)o).getName() 意味着你投 oPerson ,然后打电话 getName() 在上面。 (Person)o.getName() 意思是你打电话来 getName()o ,然后将结果强制转换为 Person . 自 o 是一个 Obejct 而且没有一个 getName() 方法,这行代码将无法编译。

u1ehiz5o

u1ehiz5o2#

在下面的陈述中

(Person)o.getName();
``` `o.getName()` 返回一个 `String` 你想投给谁 `Person` 因此,即使 `o` 有一个方法叫做 `String getName()` 反正你的案子里没有 `o` 是指 `Object` .
在下面的陈述中

((Person)o).getName();

你在选演员 `o` 至 `Person` 然后通过打电话得到名字 `getName()` 在它上面,。

相关问题