User hubert
hubert
41 уровень

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

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

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

Вернуться к плану обучения
Вернуться к обучению
java онлайн
на JavaRush
Комментарии (47)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
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>

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