Class A {
Int n= 10;
Void f (){}
Void g (){}
}
Class B extends A{
Int n = 100;
}
Если A a = B ();
То можна ссылаться на методы и переменные суперкласса.
А если B b = new B ();
Можно ссылать на переменные только класса В?
Java
Правильно ли я понял наследование?
Нет, наоборот, но не в данном случае.
Для начала - у тебя куча ошибок (больших букв), этот код вообще не компилируется. И ты забыл new в одном месте. И не указал модификаторы доступа.
Затем общее правило: потомок является экземпляром класса предка. Т. е. new B() будет экземпляром классов как A, так и B.
А теперь - что будет реально происходить:
A a = B ();
a с точки зрения компилятора - экземпляр класса A, и ему доступны все функции класса A. То, что это на самом деле экземпляр класса B, будет иметь значение только с использованием полиморфизма.
B b = new B();
А вот b - экземляр класса B. Ему доступны все функции класса B, но, как сказано выше, экземпляр потомка является также экземпляром класса предка, а значит, ему доступы также все функции класса A.
Вообще на буквах такое объяснять сложно. Вот если предок - это Figure (фигура), а потомок - Square (квадрат), то сразу все становится на места: и у предка, и у потомка можно запрашивать площадь (double getArea()), но длина стороны (double getSide()) для фигуры вообще - это что-то непонятное, зато квадрат может иметь такую функцию.
Для начала - у тебя куча ошибок (больших букв), этот код вообще не компилируется. И ты забыл new в одном месте. И не указал модификаторы доступа.
Затем общее правило: потомок является экземпляром класса предка. Т. е. new B() будет экземпляром классов как A, так и B.
А теперь - что будет реально происходить:
A a = B ();
a с точки зрения компилятора - экземпляр класса A, и ему доступны все функции класса A. То, что это на самом деле экземпляр класса B, будет иметь значение только с использованием полиморфизма.
B b = new B();
А вот b - экземляр класса B. Ему доступны все функции класса B, но, как сказано выше, экземпляр потомка является также экземпляром класса предка, а значит, ему доступы также все функции класса A.
Вообще на буквах такое объяснять сложно. Вот если предок - это Figure (фигура), а потомок - Square (квадрат), то сразу все становится на места: и у предка, и у потомка можно запрашивать площадь (double getArea()), но длина стороны (double getSide()) для фигуры вообще - это что-то непонятное, зато квадрат может иметь такую функцию.
Станислав Кузьмин
офигительно объяснили, чисто на интуитивном уровне я понимаю что к чему, но вот структурировать у себя в мозгу не могу, да и просто объяснить почему так, а не иначе)
переопределять глобальную переменную в подклассе -- глупость...
да, всё верно.
почитай на эту тему в философии джава лучше..
Нуртаза Султанбаев
еще можешь попробовать курс (сделанный с элементами игры) ..там на пример все увидишь... там около 1200 задачек.. советы по изучению. теория.. ссылки на статьи.. создание игр (тетрис шахматы змейка и другие) приложений.. программ (архиватор файлов например и тд)
ссылка javarush.ru/user/reference/66050877-884f-4ef9-b5a5-05061b0b76c0 (в начале будет введение про роботов. дальше такого будет меньше.. и начиная с 2 урока будут задания для которых материал дадут потом.. (или дадут мало материала на эту тему) или пропускай или гугли..
ссылка javarush.ru/user/reference/66050877-884f-4ef9-b5a5-05061b0b76c0 (в начале будет введение про роботов. дальше такого будет меньше.. и начиная с 2 урока будут задания для которых материал дадут потом.. (или дадут мало материала на эту тему) или пропускай или гугли..
Похожие вопросы
- Господа, я к вам с : "Наследование. конструкторы. "
- Вот, чуть погодя, понял, что не все сайты предоставляют API, отсюда вопрос: как правильно парсить сайты? ¦|¦ JAVA
- Как можно протестировать этот код и понять правильно он работает? JUnit 4. NetBeans.
- Помогите понять как решить задание по Java.
- Java не правильно отображает Русский Язык
- Правильно ли я понимаю return и void?
- Помогите понять что такое циклическая и нециклическая очередь, вот как понял я: (я знаю что такое очередь)
- Как правильно учить, есть книга например Java8 для начинающих, нужно ли что то записывать или же стараться
- Программирование - как правильно начать?
- Как правильно описать метод boolean? Выдаёт ошибку unreachable statement