class A {
int ivar = 7;
void m1() {
System.out.println ("A's m1, ");
}
void m2() {
System.out.println ("A's m2, ");
}
void m3() {
System.out.println("A's m3, ");
}
}
class B extends A {
void m1() {
System.out.println("B's m1, ");
}
}
class C extends B {
void m3() {
System.out.println("C's m3, "+(ivar+6));
}
}
public class Mixed2 {
public static void main (String[] args){
A a = new A();
B b = new B (); // создаем объект класса В (но почему он заменяет метод m1 из класса А)
b.m1(); // заменяет метод m1 из класса А
b.m2();//а здесь странно! методы из класса А (почему)
b.m3();;//а здесь странно! методы из класса А (почему)
C c = new C ();
A a2 = new C (); // КАК ПОНЯТЬ? создаем объект класса А но при чем здесь С???
a2.m3();
a2.m1();
a2.m2();
}
}
Руслан
16 уровень
Помогите понять!!!
Решен
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Руслан System Administrator в court Expert
8 мая 2020, 10:44
Спасибо ВАМ. теперь хоть понимаю о чем речь идет! Огромное спасибо.
0
Alex
8 мая 2020, 10:18
Ответ на вопрос 1 "создаем объект класса В (но почему он заменяет метод m1 из класса А)"
Метод B наследуется (с помощью слова extends) от класса A. Раз он наследуется, значит он автоматически "наследует" и все методы и переменные своего родителя.
Когда мы снова прописали метод m1 в классе B (строка 15), то старый метод, который был унаследован от класса A с таким же названием заменяется на новый.
Ответ на вопрос 2 "а здесь странно! методы из класса А (почему)"
Из ответа на первый вопрос уже можно узнать ответ и на этот. Методы m2 и m3 были унаследованы от класса A и не были заменены новым методом (как m1).
Ответ на вопрос 3 "КАК ПОНЯТЬ? создаем объект класса А но при чем здесь С???"
Давайте на время забудем о Java. У нас есть большая категория "Животные" и 2 категории поменьше: "Кошки" и "Собаки". Кошки и собаки входят в категорию животные. Если мы укажем на кошку и скажем "это кошка", то мы будем правы. Если мы укажем на кошку и скажем "это животное", то мы тоже будем правы. Также и с собакой.
Теперь про Java. Класс B наследуется от класса A, поэтому он как бы входит в категорию A и B одновременно. Далее класс C наследуется от класса B. Класс C уже входит в целых три категории A, B и C.
Поэтому мы можем создать переменную A a2 и "Положить" в неё объект стоящий ниже по иерархии "категорий" и обращаться к объекту C как к A (как мы обращаемся к кошке "животное")
Подробнее про наследование вам расскажут в квесте Java Core после 10 уровня. Пока что это знать не так важно.
+2
Руслан System Administrator в court Expert
8 мая 2020, 10:44
Спасибо
0
Vasili
8 мая 2020, 10:14
Это называется "полиморфизм"
// создаем объект класса В (но почему он заменяет метод m1 из класса А)
Класс В наследник класса А ( или B etxtends A, В расширяет А). Он может видеть и свои методы, и методы класса родителя. Если есть свой метод - то берет свой метод, если своего нет - то метод родителя.
// КАК ПОНЯТЬ? создаем объект класса А но при чем здесь С???
Это тебе нужно почитать как как создаются объекты и про конструкторы классов, как они вызываются. Мы здесь переменной а2 типа А присваиваем ссылку на создаваемый объект типа С.
+1
Руслан System Administrator в court Expert
8 мая 2020, 10:44
Спасибо
0