-
Наследование - одна из важных характеристик объектно-ориентированных языков. Языки без наследования могут называться только "объектно-ориентированными языками".
-
Подкласс наследует все члены от родительского класса
① За исключением конструктора, в конце концов, конструктор имеет то же имя, что и родительский класс
② Получение его не означает, что вы можете использовать его случайно
-
Если мы попытаемся переопределить переменную-член, которая уже существует в родительском классе, то мы определяем переменную, которая полностью не связана с переменной-членом родительского класса. В дочернем классе мы можем получить доступ к переменной, определенной в дочернем классе (родительский Класс скрыт), обратитесь к родительскому классу в методе родительского класса. Хотя у них одно и то же имя, они не влияют друг на друга .
-
Конструктор родительского класса будет вызываться перед конструктором подкласса
-
Первое предложение super () конструктора слова class указывает, какой конструктор родительского класса вызывается в соответствии с параметрами
-
При создании объекта подкласса вы должны сначала убедиться, что переменные-члены, принадлежащие родительскому классу, правильно инициализированы.
Относится к: определить инициализацию и конструктор -
Конструктор, у которого не только есть this.title = title
-
Невозможно изменить переменные-члены родительского класса с частных на защищенные.
Пример: подкласс Zhongyuan.
System.out.println("DVD:"+title+":"+director);
Теперь изменено на
System.out.print("DVD:");
super.print();
System.out.print(director);
Присоединяйтесь к родительскому классу
public void print(){
System.out.print(title+" ");
}
Таким образом, нет необходимости изменять заголовок члена родительского класса с частного на защищенный.
- Все переменные, которые содержат типы объектов в Java, являются полиморфными переменными. Термин «полиморфизм» (буквально означает множество форм) относится к переменной, которая может содержать объекты разных типов (то есть ее объявленный тип или любой подтип).
Car myCar = new Car();
То есть объект подкласса может использоваться в качестве объекта родительского класса, включая:
① Переменная, назначенная родительскому классу (происходит восходящее моделирование )
(моделирование заключается в присвоении одного типа объекта другому типу переменной)
восходящее моделирование Не нужно ставить круглые скобки впереди, в скобках ставить тип, это всегда безопасно
② Перейти к функции, которой нужен родительский объект
③ Поместите его в контейнер, в котором хранится родительский объект
public void list(){
for(Item item:listItem){
item.print();
}
}
Подумайте, что каждая переменная имеет два типа: статический и динамический.
Виден статический. Например, здесь тип элемента.
Динамический - это тип объекта, который программа запускает здесь и фактически управляет.
11. Если объект родительского класса хочет быть назначен объекту подкласса, Только на
примере моделирования 1
Vechicle v;
Car c = new Car();
v = c;//可以
c = v;//编译报错
c = (Car) v;//向下造型,当且仅当v这个变量实际管理的是Car类型
Пример 2 (Примечание: Item - родительский класс класса CD)
Item item = new Item("行路易知难", 0, "优秀公众号");
CD cd = new CD("深夜书店","许嵩",2, 10, "超好听");
item = cd;(item的动态类型变成cd了,静态未变)
CD cd2 = (CD)item;
- Назначение объектов объектам в Java фактически позволяет двум менеджерам управлять общим объектом (это имеет место в языках ООП)
String s = “hi”
s = “bye”
Вместо того, чтобы заменять hi на bye, просто содержимое, управляемое s, изменилось, первоначально указывая на hi, а теперь указывая на bye
- Стандартное определение модельного литья
Что такое преобразование типов
int i = (int)10.2
Стиль просто рассматривает вас как другой тип, но не превращает вас в другой тип.
Укладка вверх всегда безопасна
- Динамическая привязка Java по умолчанию.
Привязка: когда объектная переменная вызывает функцию, решите, какую из них вызвать.
Статическая привязка: определите, какая
динамическая привязка будет привязана в соответствии с типом объявления переменной (статическим): определите привязку в соответствии с динамическим типом переменной Какая из
них вызывает другие функции-члены в функции-члене, поскольку ее можно выразить как this ..., ее также можно рассматривать как динамическую привязку.
Например, функция print () родительского класса Item выглядит следующим образом
public void print(){
System.out.print(title+" ");
}
И на выходе
CD:深夜书店 许嵩(title是”深夜书店”)
Это потому, что функция print () подкласса CD выглядит следующим образом
public void print() {
System.out.print("CD:");
super.print();
System.out.print(artist);
}
item.print (); фактически вызывается print () подкласса
-
Покрытие: в подклассе и родительском классе есть функции с одинаковыми именами и параметрами , и эта пара функций составляет отношение покрытия.
При вызове функции с наложенным отношением через переменную родительского класса будет вызываться функция класса, к которому принадлежит объект, управляемый переменной. -
Все классы в Java, объявленные или нет, являются подклассами Object (почти все языки ООП реализуют такую однокорневую структуру, кроме C ++)
Класс Object предоставляет функцию
toString () [возвращает строковое представление объекта] [перегружено генерацией]
equals () [сравнивает, являются ли два объекта одинаковыми]
...
как получить
Object o = new Object ();
o. ...
пример
CD cd = new CD("奇妙能力歌","陈粒",1, 5, "好听");
CD cd1 = new CD("奇妙能力歌","陈粒",1, 5, "好听");
System.out.println(cd.equals(cd1));
Выход
false
Причина: теперь у класса CD нет собственного equals (), он использует Object, чтобы определить, управляют ли два менеджера одним и тем же объектом.
Решение: используйте generate, чтобы перегрузить equals на CD, то есть добавить следующий код
@Override
public boolean equals(Object obj) {
CD cc = (CD)obj;//向下造型
return artist.equals(cc.artist);
}
Новый вывод
true
Примечание: см. @Override, подпись (имя функции и параметры) функции подкласса и родительского класса должны быть одинаковыми.