#17 Внутренние и вложенные классы | Java для начинающих

  Рет қаралды 9,579

selfedu

selfedu

Күн бұрын

Пікірлер: 34
@maxim1893g
@maxim1893g Жыл бұрын
Спасибо! Очень доступно! Ваша ручка просто безподобная!
@Denis2216s
@Denis2216s Жыл бұрын
Большое спасибо за крутые уроки. Очень помогает разобраться в Джаве!
@sergejchap62
@sergejchap62 Жыл бұрын
Спасибо. Было б интересно где-то представить решение задания, которое в завершении этого урока. И конечно о нем мнение.
@Benderok451
@Benderok451 Жыл бұрын
Это уже посложнее. Надо еще раз пересмотреть.
@IFlexxx
@IFlexxx Жыл бұрын
Нужно было создать больше методов с одинаковым названием run(), разнести их по разным местам с разными модификаторами доступа. Можно еще рефлексию добавить и lombok. Потому, что начинающие должны страдать при попытке разобраться - что от чего зависит, и что откуда вызывается.
@АсяХаликова-в7б
@АсяХаликова-в7б 11 ай бұрын
Категорически не согласна. Показано, как ОБЫЧНО выглядит код, но подробно объясняют, что есть что. Что назвать можно одинаково, но понимание процесса дает ответ, метод какого класса вызываем; куда переходит программа, что там встречает и запускает. Спасибо большое! У меня пока получается совершить все подвиги.
@Алекс-ю8э2с
@Алекс-ю8э2с 2 жыл бұрын
Какое чёткое изложение, спасибо!)
@rostislavmalyshev1775
@rostislavmalyshev1775 3 жыл бұрын
Автор молодец. Только я никогда не понимал зачем нужны вложенные классы и сейчас не понимаю... "Простое лучше сложного".
@KALMAPUK
@KALMAPUK 3 жыл бұрын
Тебе нужен конкретный объект конкретного класса, но его область видимости не должна распространяться на весь проект, этот объект имеет смысл только в контексте какого-то другого объект ноги "внутри" собаки. Вне собаки объект ноги не нужен, поэтому класс делается внутренним чтобы работать с ним как с классом применять принципы ООП, но "запечатанным" внутри контекста другого класса. Это сделано для удобства. Если ты вынесешь класс ноги собаки в отдельный файл и потом в классе собаки просто сделаешь поле ноги собаки, и будешь так же работать то Абсолютно ничего не испортишь. Но! Когда у тебя в проекте будет 100-150 классов хочется такая чрезмерная декомпозиция на классы начинает раздражать и мешать.
@СергейПетров-б1ф
@СергейПетров-б1ф 2 жыл бұрын
хорош, спасибо
@ВикторЖигурда
@ВикторЖигурда 3 жыл бұрын
Подача материала хорошая!
@zamestaimja
@zamestaimja 3 жыл бұрын
А я написал в методе run класса Dog как Вы и сказали: System.out.println("foot.name"); Но никакой ошибки не выдало. Просто вывело ещё и имя локальной собачки. Какой сложный язык, у меня даже это не получается (((((( Но преподает Вы классно, спасибо!!! И с Наступающим.
@selfedu_rus
@selfedu_rus 3 жыл бұрын
Спасибо! Поле name должно быть приватным, тогда получить доступ из вне не получится. Это железобетонно - основы инкапсуляции ООП ))
@ИванКоновалюк-з9л
@ИванКоновалюк-з9л Жыл бұрын
Люди!!!=) помогите плиз по первой задаче -можно ли при создании объекта сразу задать параметры вложенного класса через объект "наружнего" класса? а то я только смог через отдельное создание статического объекта вложенного класса и передачи этой ссылки в класс Properties public class Main { public static void main(String[] args) { *Properties.Color c=new Properties.Color(8,9,10);* Properties p=new Properties(1,2,c); System.out.println("сколько красного в цвете линии "+c.red); System.out.println("сколько зелёного в цвете линии "+c.green); System.out.println("толщина линии "+p.widthLine); } static class Properties{ int widthLine; int typeLine; Color color; Properties() {} Properties(int widthLine, int typeLine, Color color){ this.widthLine=widthLine; this.typeLine=typeLine; this.color=color; } public static class Color{ int red; int green; int blue; Color(){} Color(int red, int green, int blue){ this.red=red; this.green=green; this.blue=blue; } } } }
@svk9179
@svk9179 8 ай бұрын
Я сделал без статического класса, можно задать цвета через объектную переменную. class Properties { private double widthLine; private String typeLine; private Color colorLine; public double getWidthLine() { return widthLine; } public void setWidthLine(double widthLine) { this.widthLine = widthLine; } public String getTypeLine() { return typeLine; } public void setTypeLine(String typeLine) { this.typeLine = typeLine; } public Color getColorLine() { return colorLine; } public void setColorLine(int red, int green, int blue) { this.colorLine = new Color(red, green, blue); } class Color{ private int red, green, blue; { red = green = blue = 0; } private Color(){} Color(int red, int green, int blue){ this.blue = blue; this.green = green; this.red = red; } public void setRed(int red) { if (red > 0) this.red = checkingColor(red); } public void setGreen(int green) { if (green > 0) this.green = checkingColor(green); } public void setBlue(int blue) { this.blue = checkingColor(blue); } public int getRed() { return red; } public int getGreen() { return green; } public int getBlue() { return blue; } private int checkingColor(int number){ if (number >= 0 && number < 256) return number; else return 0; } } } class DemoProperties{ public static void main(String[] args) { Properties properties = new Properties(); properties.setColorLine(157,250,147); System.out.println(properties.getColorLine().getBlue()); } }
@gscdcd8302
@gscdcd8302 2 жыл бұрын
Задачи оказались не такими легкими, как мне показалось на первый взгляд. Первую осилила с горем пополам через статический класс, не знаю правда, проходит ли такое решение. Вторую также, но вот пункт про типы, я вообще без единой идеи как реализовать🥲
@gscdcd8302
@gscdcd8302 2 жыл бұрын
Решила. Сейчас видео пересмотрела, и думаю, ну все же так очевидно было!
@AB-ku1su
@AB-ku1su 3 жыл бұрын
Это конструктор в простых скобочках без названия { } ?
@mrdregor1429
@mrdregor1429 3 жыл бұрын
Сделай уроки по Android разработке. Они намного интереснее. Или же как создать сервер с базой данных для мобильного приложения, желательно сервак на java.
@Alex_sandr1999
@Alex_sandr1999 3 ай бұрын
Лайк если тоже засмеялся с "У любой стандартной собаки должны быть ноги"
@svk9179
@svk9179 8 ай бұрын
Мой пример реализации второго подвига import java.util.HashMap; import java.util.Map; class MusicalInstrument { private String title; private int type; private Dimensions dimensions; private double price; private int yearProduction; private MusicalInstrument(){} MusicalInstrument(String title,int type, int yearProduction, double price, double width, double height, double depth){ this.title = title; this.type = type; this.yearProduction = yearProduction; this.price = price; this.dimensions = new Dimensions(width,height,depth); Static.setMap(type); } MusicalInstrument(String title, int type, int yearProduction, double price){ this.title = title; this.type = type; this.yearProduction = yearProduction; this.price = price; Static.setMap(type); } public void setTitle(String title) { this.title = title; } public void setYearProduction(int yearProduction) { this.yearProduction = yearProduction; } public void setType(int type) { this.type = type; Static.setMap(type); } public void setDimensions(double width, double height, double depth) { this.dimensions = new Dimensions(width,height,depth); } public void setPrice(double price) { this.price = price; } public int getType() { return type; } public String getTitle() { return title; } public Dimensions getDimensions() { return dimensions; } public double getPrice() { return price; } public int getYearProduction() { return yearProduction; } class Dimensions{ private double width, height, depth; private Dimensions(){} Dimensions(double width, double height, double depth){ this.width = width; this.height = height; this.depth = depth; } public double getWidth() { return width; } public double getHeight() { return height; } public double getDepth() { return depth; } public void setWidth(double width) { this.width = checkingParametrDimensions(width); } public void setHeight(double height) { this.height = checkingParametrDimensions(height); } public void setDepth(double depth) { this.depth = checkingParametrDimensions(depth); } private double checkingParametrDimensions(double number){ return number < 0? 0: number; } } static class Static{ static Map map = new HashMap(); private static int num; static { num = 0; } private Static(){} static void setMap(int type){ map.put(type,++num); } } } class DemoMultiInstrument{ public static void main(String[] args) { MusicalInstrument musicalInstrument = new MusicalInstrument("Guitar",1,2020,10500,1.25,20,15); MusicalInstrument musicalInstrument1 = new MusicalInstrument("Phono", 4, 1990,2500.36); System.out.println(MusicalInstrument.Static.map.get(4)); } }
@orangeapple5415
@orangeapple5415 3 жыл бұрын
Сделайте пожалуйста урок по Django python
@selfedu_rus
@selfedu_rus 3 жыл бұрын
Буду делать, только при наличии интереса к этой теме. Если просмотров будет столько же, что и по Java ООП, то руки опустятся )
@ВикторЖигурда
@ВикторЖигурда 3 жыл бұрын
@@selfedu_rus продолжай в том же духе
@oleh5170
@oleh5170 3 жыл бұрын
@@selfedu_rus очень жаль, что у ваших уроков по java мало просмотров, вы лично для меня находка. У меня есть мнение, что это связано с тем, что в ваших уроках мало прикладного, т.к. в основном людям нужно видео с решением их конкретной проблемы, а не видео с фундаментальными основами, но в этом их заблуждение. Не бывает волшебной пилюли, решение любой задачи должно идти через осознание основ языка и подходов к разработке. Также думаю вы имели бы успех, если бы выпустили серию обучающих видео по популярным направлениям, таким как автоматизированное тестирование или создание клиент серверного приложения, т.к. если коротко то я пришел к вам на канал из интереса к автоматизированному тестированию веб приложений. Но из-за того, что большинство уроков на эту тему не раскрывают особенности языка java, то я был вынужден искать более фундаментальное знания, чтобы не быть обезьянкой, которая только и знает как вызвать метод сторонней библиотеки, а быть в состоянии создать, что то свое. UPD: не заметил, что у вас есть уже серия по DjanGo фреймворку для веба. Хотел бы пожелать вам не отчаиваться, а продолжать творить, пускай даже и для узкой аудитории. Уверен, что успех к вам еще прийдет. Ну и конечно, контент о программировании не имеет такого успеха как видео про выживание в лесу в домике из стрейч пленки. Поэтому возможно надо искать выход к аудитории через онлайн менторство или еще как то. Всеравно большая благодарность Вам за ваш труд!
@АйбекЕрмекбаев-ч2и
@АйбекЕрмекбаев-ч2и 3 жыл бұрын
@@selfedu_rus Учу джаву уже пол года, но такого четкого и внятного объяснения я не встретил. После ваших роликов у меня сложилось впечатление , что у меня только поверхностные знания. Вы закладывайте хороший фундамент и очевидно , Вы знаете о чем вы говорите. Спасибо Вам за проделанную работу и предоставляете все это в свободный доступ!
@Частныйсектор-х4я
@Частныйсектор-х4я Жыл бұрын
вторая задача решена так: мейн: MusicItems musicItems = new MusicItems(5,2000,2020); musicItems.setSize(100,200,300); musicItems.show(); в консоле: Type: 5 Price: 2000 Years: 2020 Dimension:100, 200, 300 Total item: 1 класс: public class MusicItems { private int type,price, years; Size size = new Size(); public MusicItems(int type, int price, int years) { this.type = type; this.price = price; this.years = years; } void setSize(int a, int b, int c){ size.setWidth(a); size.setDepth(b); size.setHight(c); Counter.counters++; } void show(){ System.out.println("Type: " + type+ " Price: "+price+" Years: "+years); System.out.println("Dimension:"+size.width+", "+size.depth+", "+ size.hight); System.out.println("Total item: " + Counter.counters); } class Size{ int width = 0; int hight = 0; int depth = 0; public void setWidth(int width) { this.width = width; } public void setHight(int hight) { this.hight = hight; } public void setDepth(int depth) { this.depth = depth; } } static class Counter{ public static int counters = 0; } }
@mouserailway
@mouserailway 2 жыл бұрын
а зачем нам конструктор Dog, который ничего не делает?
@selfedu_rus
@selfedu_rus 2 жыл бұрын
мы определяем несколько конструкторов, поэтому, если не прописать конструктор без параметров, то потом не сможем создать объект, не передавая никаких аргументов. Для этого он и определен.
@mouserailway
@mouserailway 2 жыл бұрын
@@selfedu_rus спасибо
@clannajebyan
@clannajebyan Жыл бұрын
За полгода, что я пытаюсь выучить ООП и понять, хоть что-то в этом, извините, свинарнике, потому что логики очередности я тут не наблюдаю совсем, я успел выучить испанский. Наверное, не стоит пытаться дальше, претензий к коду у меня больше, чем удовольствия, более нелогичного, чем программирование я в жизни не встречал. 11:42 и что? А d2.run(); мы спокойно вызываем, хотя это класс Foot. Кроме того, d у нас это и есть Dog. Короче, нафиг.
@mrdregor1429
@mrdregor1429 3 жыл бұрын
Зачем говорить экземпляр класса, можно же по простому - объект такого-то класса
@selfedu_rus
@selfedu_rus 3 жыл бұрын
это синоним, я говорю и так и так
@xzebitionfive6653
@xzebitionfive6653 10 ай бұрын
Пример реализации задачи 2 import java.util.ArrayList; public class MusicInstrument { public static void main(String[] args) { Instrument i1 = new Instrument("Гитара", 1, 10000, 2005, 4, 5, 6); Instrument i2 = new Instrument("Скрипка", 2, 10000, 2005, 4, 5, 6); Instrument i3 = new Instrument("Гитара", 1, 10000, 2006, 4, 5, 6); Instrument.info(); } } class Instrument { String name; int type, price, year; Gabarits gabarits; Instrument(String name, int type, int price, int year, int width, int height, int depth) { this.name = name; this.type = type; this.price = price; this.year = year; this.gabarits = new Gabarits(width, height, depth); Statistics.add_info(type); } class Gabarits { int width, height, depth; Gabarits(int width, int height, int depth) { this.width = width; this.height = height; this.depth = depth; } } static void info() { Statistics.info(); } static class Statistics { public static ArrayList types = new ArrayList(); public static ArrayList counts = new ArrayList(); public static void add_info(int type) { boolean flag = true; int id = -1; for (Integer el: types) { id += 1; if (el == type) { flag = false; break; } } if (flag) { types.add(type); counts.add(1); } else { int var = counts.get(id) + 1; counts.remove(id); counts.add(id, var); } } static void info() { System.out.println(types); System.out.println(counts); } } }
Хасанның өзі эфирге шықты! “Қылмыстық топқа қатысым жоқ” дейді. Талғарда не болды? Халық сене ме?
09:25
Демократиялы Қазақстан / Демократический Казахстан
Рет қаралды 346 М.
SISTER EXPOSED MY MAGIC @Whoispelagheya
00:45
MasomkaMagic
Рет қаралды 13 МЛН
Static nested класс (прокачанная Java)
17:58
Програмания
Рет қаралды 2,7 М.
Статические вложенные классы
11:51
Oleksandr Tsymbaliuk
Рет қаралды 2,3 М.
Хасанның өзі эфирге шықты! “Қылмыстық топқа қатысым жоқ” дейді. Талғарда не болды? Халық сене ме?
09:25
Демократиялы Қазақстан / Демократический Казахстан
Рет қаралды 346 М.