Java中具有不同类型的引用对象是否有任何不同?

时间:2015-12-25 19:14:25

标签: java oop reference polymorphism compile-time

说:

  String str = "hello";
  Object obj = str;
  System.out.println(str==obj);

结果是真的,因为它指向内存中的相同对象,这是有道理的。但如果我说:

obj.indexOf("h");

或任何子类方法,我得到“找不到符号”。它们仍然指向同一个对象,那么在编译时会发生什么使得不同类型的引用对象彼此不同呢?

2 个答案:

答案 0 :(得分:3)

Object类型引用只知道属于其公共接口的方法。

如果您知道Object引用是String类型,则必须进行投射:

int index = ((String) obj).indexOf("h");

答案 1 :(得分:0)

苹果和梨。

身份检查==在运行时执行。有效而且很好。

构造obj.indexOf...编译时错误,因为类Object没有方法indexOf

如果你告诉编译器(通过强制转换)obj包含一个String,你可以得到有效的代码

((String)obj).indexOf("h");

将再次编译