User hubert
hubert
41 уровень

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

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

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

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


Почему так происходит? Примитивы и обертки очень странно себя ведут с точки зрения обывательской логики)
broke Уровень 28, Россия
9 мая 2016
У меня такой вопрос: тоже в лекции Порядок загрузки классов, статические данные
class Cat
{
 public static int catCount = 0 ;
 public static String namePrefix;

 static
 {
  Properties p = new Properties();
  p.loadFromFile("cat.properties");
  namePrefix = p.get("name-prefix");
 }

 <strong>public static int maxCatCount = 50;</strong>

 static
 {
  Properties p = new Properties();
  p.loadFromFile("max.properties");
  if (p.get("cat-max") != null)
   maxCatCount = p.getInt("cat-max");
 }

}

строка public static int maxCatCount = 50; уже проинициализировала переменную почему продолжает выполнятся статический блок? может "= 50" здесь лишнее?
psv Уровень 25, Санкт-Петербург, Россия
7 мая 2015
hotte Уровень 29, Одесса, Россия
3 марта 2015
возможно, я чего-то не понимаю, но Где Сама Лекция?
я вижу только «план лекции» :(
artemtimac Уровень 22, Nizhniy Novgorod, Россия
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
Будем ли мы дальше проходить регулярные выражения и что посоветуете почитать на эту тему?