Является ли java.lang. Объектом суперкласса всего
пользовательский класс / объекты, унаследованные
неявно
Незначительная коррекция: относительно следующего выражения:
суперкласс всех custom
class/objects
Класс A является суперклассом другого класса B . Объекты или экземпляры из B не имеют A в качестве суперкласса (поскольку они являются объектами / экземплярами объектов, а не самими классами). Наиболее подходящее описание состоит в том, что эти объекты экземпляры класса B , который имеет A в качестве суперкласса.
Теперь к вашему вопросу по java.lang.Object
. Это суперкласс всего, что может быть реализовано во время выполнения Java. Это включает в себя оба:
- классы, которые вы пишете (пользовательские классы), а также
- классы, предоставляемые самим языком Java.
Я думал, что Java не поддерживает несколько
наследование.
Это не так. Он поддерживает только одиночное class
(или implementation
) наследование (в сочетании с множественным interface
(или type
) наследованием.
Вы путаете наследование с иерархией классов. Пожалуйста, см. Ниже.
Я спрашиваю, почему я уже
унаследовать от другого класса в моем
пользовательский класс и снова заставляет Java
неявное наследование
java.lang.Object поверх него,
И это хорошо с множественным наследованием. Скажем, у вас есть класс B, который вы написали, унаследованный от класса, уже предоставленного Java (скажем, класса A). Таким образом, существует линейное, переходное отношение следующим образом:
java.lang.Object > A > B
Где >
обозначает immediate parent of
. Любой класс, унаследованный от Object, может иметь только один и только один immediate parent
. Ни в коем случае у вас не будет класса C, для которого не выполняется следующее ограничение для любых двух классов A и B:
для всех A, B {A> B -> для всех C {C>
B <-> C == A}}
Это означает, что для всех классов A и B, таких как A, является immediate parent
из B, тогда для всех классов C, C может быть только immediate parent
из B * тогда и только тогда, когда C само по себе А.
С одним наследованием вы можете (теоретически) иметь бесконечную цепочку наследования A > B > C > ...
, пока каждому классу в цепочке предшествует one and only one
непосредственный родитель. В качестве полезной аналогии это напоминает соотношение predecessor
в натуральных числах (0 preceedes 1 preceedes 2 which preceedes 3 ...
).
Отказ от ответственности : Это не то, что вы используете в повседневной жизни. Однако, точно зная, что эти вещи означают под колпаком, вы получите огромную помощь в ориентации объекта.
Разве это не множественное наследование?
Нет (см. Выше.) В отличие от одиночного наследования - как объяснено выше - в множественном наследовании у вас может быть несколько непосредственных родителей (как видно в C ++).
Как мы заметили в приведенных выше определениях, отношение транзитивного наследования '>' происходит от одного класса к другому. Но с множественным наследованием отношение происходит от набора суперклассов {A}
к одному классу {B}
:
{A} > B -> forAll a {a in A <-> a > B}
А в C ++, где у вас могут быть классы без родителей, тогда набор {A}
может быть нулевым. В java у вас также есть множественное наследование, но ограничено interfaces
(или типами.)
Также, класс java.lang.class также
суперкласс для всех пользовательских
классы / объекты?
Нет. Это поможет вам в обучении, если вы посетите руководства Javadoc, которые доступны в Интернете. Поищи это. На самом деле.
Если нет, то как в java-отражениях мы можем
получить тип класса для любого класса
прошло или позвоните isInstance по любому
объект
Потому что экземпляры java.lang.Class (и все классы, используемые отражениями java) являются дескрипторами метаданных для других классов. Это не имеет ничего общего с наследованием. То, на что вы ссылаетесь, известно как meta-programming
.
Кроме того, java.lang.Class является финальным классом;следовательно, это не может быть суперклассом чего-либо.
Функция java.lang.Class должна быть поставщиком / дескриптором метаданных для всех экземпляров и подклассов java.lang.Object (включая сам java.lang.Class.) Поле класса, связанное скаждый класс (.ie. String.class) является статическим полем уровня класса, описывающим метаданные, связанные с этим классом.
Метаданные, содержащиеся / описываемые java.lang.Class, содержат объекты доступа к метаданным для методов, конструкторов и полей.Опять же, это не имеет ничего общего с наследованием.
Наследование = / = метапрограммирование.
Надеюсь, это поможет.