2012-05-08 43 views
3

我正准备参加java考试。我碰到以下问题关于对象超类和铸造的问题

String s = new String ("hello"); 
Object o = (object) s; 

由于os是指向同一个对象的引用都来了,有没有通过在参考o参考s访问对象有什么区别?

会我说的所有对象(比如一个是由s引用)在Java和这样的Object子类使用参考s,您将能够调用超类Objectclone()熟知的方法是正确的和String已知的方法,如length()。而超类对象引用o只能调用它自己的方法,而不能调用它的子类?谢谢。

+6

是的,这句话是正确的。 –

+0

你完全正确。 – Sheriff

+0

两个小注释:你不需要明确地将s转换为Object,(上传可以总是隐含的),并且你不需要创建'new String(“hello”)' - 你可以写'String s =“hello”'和's'仍然是对'String'对象的引用,与你的代码相同 - 尽管它位于不同的地方(在permgen而不是在GC上)堆“)。 – yshavit

回答

1

区别在于,通过使用o您将无法调用特定于字符串的方法,除非将其转换回String。

但是,您在String类上定义的o上调用的任何方法都会调用该方法的更高版本。例如,o.toString()将返回“hello”,而不是Object.toString()通常返回的描述符。这被称为多态性。