Может кто-нибудь по пунктам объяснить как код срабатывает?
Например метод по середине "Это Object", а на экран выводит "Это double"
В лекции понятно было, а в этой задаче ничего не понятно(((
Алексей Мирный
41 уровень
Задачу решил, но как это работает непонятно((
Решен
Комментарии (18)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Pig Man Главная свинья в Свинарнике
27 октября 2020, 12:37решение
Ну смотри, тебе даются такие значения
Требуемый вывод:
Нам нужно оставить только такие принты:
Почему вывод будет правильным:
Первое значение у нас примитивного типа short, из 3 методов с их типами принимаемых аргументов short может расшириться либо до double, либо до Object. До Integer не может, потому что примитив расширяется либо до следующего примитива, либо до СВОЕГО класса, либо до класса Number, либо уже до Object. double уже, чем Object (это самый общий класс из всех, так что он подходит вообще под все), поэтому тип short примет функция с параметром типа double (если бы ее не было, тогда бы уже принял Object).
Второе значение типа Number. После него подойдет только Object (он шире), поэтому это он
Третье значение у нас это примитив int. Кажется, что его примет Integer, но тут нужно знать порядок расширения: сначала пройдется по всем примитивам от bite до double, и только потом будет расширяться до их оболочек (Byte-Double), если и их не будет, то Number, если его не будет, то Object. Так что в этом варианте с int его подхватит тип double, раз самого int у нас нет
Четвертое значение имеет тип Integer, тут ничего сложного, у нас есть такой тип
Пятое - повторение третьего +39
Алексей Мирный Backend Developer
27 октября 2020, 12:39
Спасибо, нужно идти повторно изучать сужения и расширения
0
Gold Apple iOS Developer
8 мая 2021, 21:00
Извини за беспокойство, ни слова здесь не понял, можешь посоветовать где почитать? А то хрень на JR читать желания никакого
0
Алексей Мирный Backend Developer
27 октября 2020, 11:09
Задачу решил как то интуитивно, и сам не понял как я её решил
0
AlexS
29 октября 2020, 11:44
аналогичная ситуация
0
Алексей Мирный Backend Developer
27 октября 2020, 11:09
package com.javarush.task.task15.task1506;
/*
Что-то лишнее
*/
public class Solution {
public static void main(String[] args) {
print((short) 1);
print((Number) 1);
print(1);
print((Integer) 1);
print((int) 1);
}
public static void print(Integer i) {
System.out.println("Это Integer");
}
public static void print(int i) {
System.out.println("Это Integer");
}
public static void print(Short i) {
System.out.println("Это Object");
}
public static void print(Object i) {
System.out.println("Это Object");
}
public static void print(double i) {
System.out.println("Это double");
}
public static void print(Double i) {
System.out.println("Это double");
}
public static void print(float i) {
System.out.println("Это Double");
}
}
0
ivan tay
27 октября 2020, 11:15
Лично я смотрел на то, какого типа переменная. И уже от этого отталкивался. Например метод с переменой i типа Integer, подходит и для int i (Так как Integer класс-обёртка int).
+1
Алексей Мирный Backend Developer
27 октября 2020, 11:18
Два верхних метода Integer i и int i, какой оставляем и почему?
0
hidden #2322530
27 октября 2020, 11:21
твой код я запустил нигде Double не выдаёт.
0
Алексей Мирный Backend Developer
27 октября 2020, 11:25
верное решение выкладывать же нельзя вот я и выложил просто задачу.
По факту для решения я удалил второй сверху и последний снизу метод и все заработало, но почему заработало я так и не понял
0
hidden #2322530
27 октября 2020, 11:28
тут передаётся тип float, поэтому выводить Double некорректно.
int i , это по факту и есть Integer (только примитивная его версия)
порядок объявления методов в классе роли не играет.
важен порядок объявления переменных и инициализации их.
0
Алексей Мирный Backend Developer
27 октября 2020, 11:39
На экран вывелось:
Это double
Это Object
Это double
Это Integer
Это double
Это с кодом никак не бьется.
0
hidden #2322530
27 октября 2020, 11:43
у меня после удаления остались только 1, 4, 5 методы.
0
Алексей Мирный Backend Developer
27 октября 2020, 11:48
а я вроде только два метода удалял (посмотреть решение не могу ибо сбросил его)
вобщем так ничего и не понял, вернул сюда на 35 уровне
0
hidden #2322530
27 октября 2020, 10:59
без прикладывания кода, вопрос вырван из контекста.
0
Алексей Мирный Backend Developer
27 октября 2020, 10:59
Java Core
5 уровень, 4 лекция
Самая первая задача.
0
ivan tay
27 октября 2020, 11:05
Код программы прикрепи
0
ivan tay
27 октября 2020, 10:57
Какая задача?
0