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

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

Статья из группы Архив info.javarush
План уровня:
  • Перегрузка методов, особенность вызова конструкторов
  • Модифиаторы доступа public, protected, модификатор по умолчанию (package), private
  • Неявная реализация абстрактного метода
  • Расширение видимости
  • Расширение типа результата, возвращаемого методом
  • Перегрузка методов
  • Порядок вызова конструкторов
  • статический блок
  • Порядок инициализации данных

Курс Java Что еще можно посмотреть на досуге: Инициализация членов класса Отличная подборка историй трудоустройства учеников JavaRush. Почитайте обязательно!
Нашли классную ссылку к материалу данной темы? Добавьте ее сюда в виде комментария. Возможно, именно Ваша ссылка поможет другому человеку стать программистом и улучшить свою жизнь!

Вернуться к плану обучения
Вернуться к обучению java онлайн на JavaRush
Комментарии (18)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
xgrothx Уровень 30
8 февраля 2017
public class Solution {
    public static void main(String[] args) {
        printMatrix((Double) 2.0, (Double) 3.0, "8");
        
    }

    public static void printMatrix(Integer m, Integer n, String value) {
        System.out.println("Integer");
    }
    
    public static void printMatrix(double m, double n, String value) {
        System.out.println("Double");
    }
    
    public static void printMatrix(Number n, Number m, String value) {
        System.out.println("Number");
    }


Да, очень странно. Вывод на экран:
Number


Почему так происходит? Примитивы и обертки очень странно себя ведут с точки зрения обывательской логики)
artemtimac Уровень 22
28 января 2015
В лекции Порядок загрузки классов, статические данные сказано, что статические переменные нельзя инициализировать в конструкторе, поэтому применяются статические блоки. Разъясните этот момент, пожалуйста, т.к. у меня свободно получается делать это в конструкторе, или я, видимо, не понял, что имелось ввиду.
asolovey Уровень 26
6 августа 2014
В этой статье по ссылке об инициализации, есть такой пример:

//: initialization/ArraysOfPrimitives.java
// Массивы простейших типов.
import static net.mindview.util.Print.*;
 
public class ArraysOfPrimitives {
  public static void main(String[] args) {
    int[] a1 = { 1, 2, 3, 4, 5 };
    int[] a2;
    a2 = a1;
    for(int i = 0; i < a2.length; i++)
      a2[i] = a2[i] + 1;
    for(int i = 0; i < a1.length; i++)
      print("a1[" + i + "] = " + a1[i]);
  }
}
<spoiler text="Output:">

a1[0] = 2
a1[1] = 3
a1[2] = 4
a1[3] = 5
a1[4] = 6


Не могу понять, почему такой вывод, если мы присваиваем значения элементов массива a1 элементам массива a2. Ведь a1 по идее значения при этом не должны меняться. Объясните, пожалуйста.
hhp Уровень 28
20 июля 2014
Помогите разобраться — почему в main метод me.getMyParent() возвращает ссылку на Cat, а не на Tiger?
Ведь me фактически ссылается на Tiger, т.е при вызове метода
getMyParent() в процессе работы программы определяется фактический класс объекта(а он Tiger) и должен вызваться метод именно класса Tiger, который должен вернуть ссылку на Tiger, а не на Cat.
В последней строчке в main при попытке присвоить Tiger myParent = me.getMyParent(); компилятор подчеркивает и пишет:
«Incopatible types. Required: Tiger. Found: Cat»

public class Solution
{
    public static void main(String[] args)
    {
        Tiger parent = new Tiger();

        Cat me = new Tiger();
        me.setMyParent(parent);
        Tiger myParent = me.getMyParent();
    }
}

class Cat
{
    public Cat parent;
    public Cat getMyParent()
    {
        return this.parent;
    }
    public void setMyParent(Cat cat)
    {
        this.parent = cat;
    }
}

class Tiger extends Cat
{
    public Tiger getMyParent()
    {
        return (Tiger)this.parent;
    }
}
Izhak Уровень 22
20 мая 2014
в лекции Создание объектов. Порядок вызова конструкторов два раза повторяется одна и та же таблица.
Spitfire Уровень 33
30 апреля 2014
А каким образом происходит расширение типа, для классов-оберток над примитивными типами?
Вот пример кода:
public static void main(String[] args){
        print((Byte)(byte)1);
        
    }

    public static void print(int i)
    {
        System.out.println("int");
    }

    public static void print(Short i)
    {
        System.out.println("Short");
    }

Он выводит на экран
int
что для меня стало неожиданностью — не думал, что объектный тип будет «расширен» до примитивного.
Кто-то может рассказать, какая процедура расширения в таких случаях?
Nazgul Уровень 33
14 апреля 2014
Будем ли мы дальше проходить регулярные выражения и что посоветуете почитать на эту тему?
tarrus Уровень 20
15 марта 2014
Оставьте хоть какие нибудь ссылки где можно почитать про эти темы в лекции.
Maksim_Bardin Уровень 28
12 марта 2014
У меня вопрос по лекции «Порядок инициализации переменных».
Вот например если так:
public class Temp1
{
    public int getD()
    {
        return d;
    }

    public int a = getD();
    public int b = d;
    public int d = 4;
}

Почему в случае присваивания переменной a значения переменной d через функцию все нормально (a = 0),
а в случае присваивания переменной b значения переменной d компилятор пишет ошибку?
Если класс загружается сверху вниз, то d неизвестна ни там ни там. Судя по всему в случае использования функции применяется какой-то другой механизм?
phashik Уровень 28
12 марта 2014
Что-то я не понял в лекции про вызов Cat.print(null)
Показаны две ситуации.
В первой
null не имеет определенного типа и компилятор откажется компилировать этот код
А во второй
ошибки компиляции не будет и вызовется метод print(String s), что несколько неочевидно
И никаких объяснений, почему же случается такая неочевидность :(