JavaRush /Java блог /Архив info.javarush /Уровень 12: план уровня и доп. материалы
hubert
41 уровень

Уровень 12: план уровня и доп. материалы

Статья из группы Архив info.javarush
План уровня:
  • Основы ООП: перегрузка, полиморфизм, абстракция, интерфейсы.
  • Полиморфизм детально
  • Переопределение методов
  • Приведение ссылочных типов: расширение и сужение. type cast
  • Динамическая диспетчеризация методов
  • Доступ к методам базового класса - super
  • instanceof
  • Перегрузка методов
  • Абстрактные классы
  • Интерфейсы

Курс Java Что еще можно посмотреть на досуге: Глава "Полиморфизм" в Thinking in Java Для чего нужен super - официальная версия Тут можно скачать краткую инструкцию по хоткеям в IntelliJ Idea
Нашли классную ссылку к материалу данной темы? Добавьте ее сюда в виде комментария. Возможно, именно Ваша ссылка поможет другому человеку стать программистом и улучшить свою жизнь!

Вернуться к плану обучения
Вернуться к обучению java онлайн на JavaRush
Комментарии (45)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Tatiana_Tatiana Уровень 23
2 июля 2016
Я тоже прошла уровни 11 и 12 за два дня, с легкостью решала практически все задачки. Меня не отпускает ощущение, что я о полиморфизме, интерфейсах, абстрактных методах узнала только теорию, а тренировалась на написании синтаксиса. На каждую темку несколько одинаковых задачек, расставить кодовые слова и т.п. Задачек по смыслу не было не одной! Или с таким багажом (10 уровней) нельзя пока ничего написать по смыслу, и смысловые задачки будут позже? Может кто-нибудь прокомментировать?
mrANDERSON Уровень 26
7 июня 2016
Доброго времени суток!
Как Вы думаете дженерики это все-таки полиморфизм или нет?)
Denk Уровень 27
6 апреля 2016
А уровни 11 и 12 пошустрее идут, прошел два за один день, и задачи решил на половину.
DmitryChVW Уровень 19
30 марта 2016
Помогите пожалуйста разобраться в понятиях сужения и расширения ссылочных типов. Есть разногласие в этих понятиях в лекции 12 данного курса и по ссылке http://old.intuit.ru/department/pl/javapl/7/2.html
В лекции сказано следующее:

А на intuit.ru следующее, то есть всё наоборот, поменяны понятия сужения и расширения типов:


То есть в лекции 12 переход от производного класса (дети) к базовому (родители) называют «классическим сужением типа», а на интуите «переход от детей к родителям» называют расширением. Где же правильно, или что-то я не правильно понимаю? Спасибо
WhiteSteel Уровень 21
25 декабря 2015
В первом уроке этого уровня, 3-й пункт «Приведение типов», по-моему написан с грамм. ошибкой «Т.к. класс при наследовании получает все методы и данные класса родителя, то объект этого класса разрешается сохранять (присваивать) в переменные класса родителя». буква «у» слову ОБЪЕКТ в студию!
crivenco Уровень 21
7 апреля 2015
Ссылка Тут можно скачать краткую инструкцию по хоткеям в IntelliJ Idea — не работает
mTihiy Уровень 41
29 марта 2015
Корректен ли пример применяемый в лекции, где кит наследуется от коровы?
в «Философии Java» и других источниках написано, что наследование применяется там, где есть связь «является».
Кит ведь не является коровой.
Odnolap Уровень 8
15 марта 2015
Все таки считаю некорректным утверждение «Статические методы не наследуются и, следовательно, не переопределяются» в первом уроке «Полиморфизм и переопределение». Потому как если написать класс A со статическим методом method, потом написать класс B extends A, в котором методов не создавать, после чего вызвать B.method(), то мы получим выполнение действий, указанных в реализации этого метода в классе A.
public class A
{
 public static void method()
 { 
 System.out.println(«class A»);
 }
}

public class B extends A 
{
}

public static void main(String[] args)
{
 B.method();
}

Вывод:
class A
Что это, если не наследование статического метода?
С другой стороны, напиши мы реализацию этого метода в B, то есть переопредели его, то при вызове B.method, мы получим выполнение действий, описанных в реализации класса B. Что это, если не переопределение статического метода?
public class A
{
    public static void method()
    { 
        System.out.println("class A");
    }
}

public class B extends A 
{
    public static void method()
    { 
        System.out.println("class B");
    }
}

public static void main(String[] args)
{
    B.method();
}

Вывод:
class B
Да, если в этом случае создать экземпляр класса B в переменной класса A и вызвать у нее этот статический метод, то вызовется реализация, описанная в классе A
A a = new B();
a.method;

Вывод:
class A
Но тут надо просто сказать, что при вызове статического метода у переменной компилятор вместо нее подставляет ее тип, и не смотрит, что в ней содержится. Т.е. следующин 2 вызова статических методов аналогичны:
//1
A a = new B();
a.method();
//2
A.method();
tsev Уровень 30
29 января 2015
На том же ресурсе есть альтернативная страница.
Ruzveld Уровень 34
20 июня 2014
Думаю, каждый, кто попробует испытать код из уроков про интерфейсы, столкнется с ошибкой компиляции при объявлении методов классов, унаследованных от интерфейсов. Как написали здесь, это происходит потому, что к каждому методу интерфейса неявно приписывается публичный уровень доступа, поэтому попытка объявить метод без модификатора public приведет к ошибке.
Например
<code>interface WallBuilder
{
    void buildWall();
}
class Robot implements WallBuilder
{
    //void buildWall(); - ТАК НЕЛЬЗЯ
    public void buildWall(); //надо так
}</code>

Наверное есть смысл упомянуть об этом в самом уроке.