Есть ли super () в классе Object, и если да, то куда он указывает? - PullRequest
2 голосов
/ 10 января 2012

super() неявно помещается в каждый конструктор, так что он получает методы, упомянутые в родительском классе.Самый высокий класс в иерархии - Object.

Вопрос: на что указывает класс super() из Object?

Ответы [ 8 ]

8 голосов
/ 10 января 2012

Вы можете найти это интересным.

System.out.println("System.class.getSuperclass()= "+System.class.getSuperclass());
System.out.println("Object.class.getSuperclass()= "+Object.class.getSuperclass());

гравюры

System.class.getSuperclass()= class java.lang.Object
Object.class.getSuperclass()= null
2 голосов
/ 10 января 2012

См. 12.5. Создание новых экземпляров класса JLS

Если этот конструктор предназначен для класса, отличного от Object, тогда этот конструктор будет начинаться с явногонеявный вызов конструктора суперкласса (с использованием super).

2 голосов
/ 10 января 2012

Класс Object не может иметь super (), это самый высокий элемент в иерархии классов. Все, что ниже, будет иметь super (), но не Object.

2 голосов
/ 10 января 2012

Поучительно проверить исходный код для объекта

Как видите, у него нет базового класса (обратите внимание, что неявно базовый класс будет Objectно как это может быть в этом случае?)

Как отмечено в комментариях к коду, это корень иерархии Java.Как таковой, это особый случай и не имеет вызова суперкласса.

1 голос
/ 10 января 2012

Класс объекта находится в базе всех классов в Java, поэтому в конструкторе класса объекта не будет никакого вызова super ().

Он не расширяется ни одним классом, поэтому очевидно, что он не вызывает super в своем конструкторе.

1 голос
/ 10 января 2012

Там не было бы супер в объекте.

0 голосов
/ 13 мая 2013

Вы можете проверить это, написав два класса и расширив один класс от другого

Пример:

Создать класс A как:

class A{

   int a, b;

   A(int a, int b){
   }

}

Создать класс B, который расширяеткласс A:

class B extends A{
    public static void main(String a[]){
        B b = new B();
    } 
}

При попытке создать объект класса B вы получите ошибку, потому что вызывается конструктор по умолчанию класса B, и который intrun вызывает конструктор по умолчанию суперкласса "A",но класс A не имеет конструктора по умолчанию или нулевого параметра.

0 голосов
/ 10 января 2012

Думайте, как цепь останавливается на объекте.

Как A -> super () -> B-> super () -> стоп

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...