Object的属性有什么区别?

时间:2015-12-02 17:56:25

标签: java object inheritance

我对Java中对象的以下声明感到困惑。对于前: 我需要为ClassName

创建一个对象

我可以用两种方式做到:

  1. Object obj = new ClassName();
  2. ClassName obj1 = new ClassName();
  3. objobj1之间的主要区别是什么?或者它们是相同的?

3 个答案:

答案 0 :(得分:2)

Object是ClassName的超类,事实上,它是您创建的所有类中最顶级的类。 Java允许您使用子类,就好像它是超类的实例(它具有相同的方法,尽管它们可能被覆盖)。

区别在于如何使用它们。在第一种情况下,编译器将obj视为Object类型的引用,并且引用实际上指向ClassName类型的实例。在第二种情况下,编译器将obj1视为ClassName类型的引用,引用指向ClassName类型的实例。

在第一种情况下,您无法调用子类中声明的任何方法,因为Object类型实际上并不包含这些方法(并且编译器不会对它们有所了解) ),而您可以使用第二种方法来调用方法并访问子类中声明的字段。

答案 1 :(得分:1)

Object obj = new ClassName();您创建了obj类型的引用Object,并将其引用到ClassName个实例。

ClassName obj1 = new ClassName();,此处创建的对象和引用均为ClassName类型。

答案 2 :(得分:1)

我建议在Oracle的官方Java教程中阅读(动态)多态性的概念。

Link is right here.