OriginalGriff
Цитата:
то, что делает специальное obj1 obj2 за?
Ничего.
На самом деле вы можете это сделать:
BaseClass obj1 = new BaseClass();
BaseClass obj2 = new ChildClass();
obj1 = obj2;
То, что происходит, это
наследование - ChildClass наследуется от BaseClass, поэтому это "базовый класс с дополнительными функциями" - каждый экземпляр является одновременно экземпляром ChildClass и экземпляром BaseClass.
Подумайте о машинах на мгновение: Ты можешь водить машину. Это означает, что вы можете ездить на Ford и Mercedes; и далее вы можете ездить на Ford Fiesta, Ford Focus, Mercedes A Class и Bugatti Veyron - вам не нужно проходить новый тест для каждого производителя или каждой модели.
"Фокус" наследует от "Форда", который наследует от "автомобиля"
"Класс а" наследует от "Мерседеса", который наследует от "автомобиля".
Поэтому все, что автомобиль может делать (StartTheEngine, DriveToTheShops) любой Форд можно сделать, и любой фокус или Фиеста также можете сделать.
Вернемся к компьютерам, и это то же самое: у вас есть базовый класс, и все производные классы могут делать все, что может база. Когда вы используете переменную, ее тип определяет то, что компилятор позволит вам сделать:
BaseClass obj1 = new BaseClass();
BaseClass obj2 = new ChildClass();
obj1.BaseClassMethod();
obj2.BaseClassMethod();
Все в полном порядке.
Но это не позволит вам использовать определенные элементы ChildClass:
obj1.ChildClassMethod();
obj2.ChildClassMethod();
Оба они выдадут вам ошибку компилятора, потому что obj1 и obj2 оба способны содержать базовый класс, что не означает, что то, что они держат, будет экземпляром дочернего класса.
Есть ли в этом хоть какой-то смысл?