2012-03-28 3 views
1

У меня есть класс java класса "SampleA". Почему «SampleA» знает, что его суперкласс - это Object?Как класс может знать, что его суперкласс - это объект?

Вот мои ответы,

  1. В процессе разработки, конфигурация JRE в затмении будет автоматически сказать, что каждый класс имеет супер класс как «Объект»

  2. Во время развертывания, загрузчики классов принимают ответственность сказать, что суперкласс - это «Объект».

Исправьте меня.

+0

Если один из ответов помог вам, то не забудьте пометить его как правильный ответ. – Jivings

ответ

3

Во время компиляции, если суперкласс не указан, он будет установлен как java/lang/Object. Для того, чтобы уточнить, что это будет точно таким же, как если бы вы объявили класс как объект, простирающийся:

public class Example extends Object { 
} 

Все компилятор делает это действует как сэкономить время, а это означает, что вы не должны писать выше все класс, это все.

Для обеспечения этого во время выполнения процесса проверки ClassLoading будет проверяться, что у всех классов определенно есть суперкласс. За единственным исключением java/lang/Object, у которого нет суперкласса.

+0

Кто это делает? – Hari

+0

@Hari Компилятор. –

+0

Компилятор устанавливает его во время компиляции. – Jivings

0

JRE - это среда выполнения, загрузчики классов входят в картину во время выполнения. Каждый объект относится к информации о классе. Супер класс по умолчанию по JLS - это java.lang.Object. Вы можете узнать иерархии классов, используя «отражение» в java.

1

От Java Language Specification:

4.3.2. Объект класса

Объект класса является суперклассом (§8.1.4) всех других классов.

+0

+1. Или вопрос плохо сформулирован, или это в настоящий момент правильный ответ. – aioobe

1

Во время компиляции, компилятор, будет ли ваш класс расширяет некоторый другой класс, используя расширяет ключевое слово или нет. если не будет установлен ваш класс как распространяющееся java.lang.Object

Вы можете проверить это после компиляции класса с помощью javap инструмент, предоставляемый с JDK

1

Вы также можете использовать этот код, я пытался :

public class Example { 
public static void main(String[] args) { 
    Example obj = new Example(); 
    obj.getSuperClassName(); 
} 
public void getSuperClassName() { 
    Class cls = this.getClass(); 
    System.out.println(cls.getSuperclass()); 
} 
} 

Выход:

class java.lang.Object 
+0

Это не отвечает на вопрос, просто доказывает это. – Jivings

+0

@ Jivings Итак, прочитайте мою первую настройку «Вы также можете» там. –

0

Я предполагаю, что й при этом вы спрашиваете, как сам класс может узнать, что его собственный суперкласс находится во время выполнения.

Вот как:

public class Sample .... { 

     private boolean extendsObject() { 
      return this.getClass().getSuperclass() == Object.class; 
     } 
Смежные вопросы