(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()
在您的情况下无论如何都不存在,因为 o
是 Object
.
的引用
在下面的语句中
((Person)o).getName();
您正在将 o
转换为 Person
,然后通过调用 getName()
从中获取名称,。
转换运算符的优先级低于方法调用。
((Person)o).getName()
表示您将 o
转换为 Person
,然后对其调用 getName()
。
(Person)o.getName()
表示您在 o
上调用 getName()
,然后将结果转换为 Person
。由于 o
是一个 Obejct
并且没有 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()
在您的情况下无论如何都不存在,因为 o
是 Object
.
在下面的语句中
((Person)o).getName();
您正在将 o
转换为 Person
,然后通过调用 getName()
从中获取名称,。
转换运算符的优先级低于方法调用。
((Person)o).getName()
表示您将 o
转换为 Person
,然后对其调用 getName()
。
(Person)o.getName()
表示您在 o
上调用 getName()
,然后将结果转换为 Person
。由于 o
是一个 Obejct
并且没有 getName()
方法,因此这行代码无法编译。