Java — строго типизированный язык.
К примитивным типам применяются стандартные преобразования и автоматическое продвижение.
Совместимость типов строго соблюдается.
Обычно ссылочная переменная из одного класса не может ссылаться на объект из другого класса.
Даже если классы X и Y структурно одинаковы, невозможно присвоить ссылку X объекту Y, поскольку типы различаются.
Как правило, переменная ссылки на объект может ссылаться только на объекты своего типа.
Исключением из правила наложения типов является то, что ссылочная переменная суперкласса может ссылаться на объекты любого подкласса, производного от этого суперкласса.
Поскольку Y является производным от X, x2 разрешено получать ссылку на объект Y.
Тип ссылочной переменной, а не тип объекта, на который она ссылается, определяет элементы, к которым возможен доступ.
Когда ссылка на объект подкласса присваивается переменной суперкласса, доступ возможен только к членам, определенным суперклассом.
В этом примере x2 не может получить доступ к элементу b из Y, поскольку класс X не знает о членах, добавленных подклассом.
Ссылки на подклассы, присвоенные переменным суперкласса, встречаются часто, особенно при вызове конструкторов в иерархиях классов.
Подклассы могут извлечь выгоду из конструкторов, которые принимают объект из суперкласса в качестве параметра, позволяя создавать копии объектов.
В этой программе t2 создан из t1 и поэтому идентичен.
Внимание в этом конструкторе треугольников:
// Создает один объект из другого.
Треугольник(Объект треугольника) {
супер(об); // передает объект конструктору TwoDShape
стиль = ob.style;
}
Он получает объект типа Triangle и передает его (через супер) этому конструктору TwoDShape:
//Конструирует один объект из другого.
TwoDShape(TwoDShape ob) {
ширина = об.ширина;
высота = ob.height;
}
Конструктор TwoDShape() ожидает получить объект типа TwoDShape.
Конструктор подкласса Triangle() передает ему объект типа Triangle.
Это работает, потому что ссылка из суперкласса, например TwoDShape, может ссылаться на объект из подкласса, например Triangle.
Допускается передавать ссылку от объекта производного класса на конструктор суперкласса.
Конструктор суперкласса TwoDShape() инициализирует только члены, принадлежащие классу TwoDShape, независимо от дополнительных членов подкласса Triangle.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3