Нужно было создать больше методов с одинаковым названием run(), разнести их по разным местам с разными модификаторами доступа. Можно еще рефлексию добавить и lombok. Потому, что начинающие должны страдать при попытке разобраться - что от чего зависит, и что откуда вызывается.
Категорически не согласна. Показано, как ОБЫЧНО выглядит код, но подробно объясняют, что есть что. Что назвать можно одинаково, но понимание процесса дает ответ, метод какого класса вызываем; куда переходит программа, что там встречает и запускает. Спасибо большое! У меня пока получается совершить все подвиги.
Тебе нужен конкретный объект конкретного класса, но его область видимости не должна распространяться на весь проект, этот объект имеет смысл только в контексте какого-то другого объект ноги "внутри" собаки. Вне собаки объект ноги не нужен, поэтому класс делается внутренним чтобы работать с ним как с классом применять принципы ООП, но "запечатанным" внутри контекста другого класса. Это сделано для удобства. Если ты вынесешь класс ноги собаки в отдельный файл и потом в классе собаки просто сделаешь поле ноги собаки, и будешь так же работать то Абсолютно ничего не испортишь. Но! Когда у тебя в проекте будет 100-150 классов хочется такая чрезмерная декомпозиция на классы начинает раздражать и мешать.
А я написал в методе run класса Dog как Вы и сказали: System.out.println("foot.name"); Но никакой ошибки не выдало. Просто вывело ещё и имя локальной собачки. Какой сложный язык, у меня даже это не получается (((((( Но преподает Вы классно, спасибо!!! И с Наступающим.
Люди!!!=) помогите плиз по первой задаче -можно ли при создании объекта сразу задать параметры вложенного класса через объект "наружнего" класса? а то я только смог через отдельное создание статического объекта вложенного класса и передачи этой ссылки в класс 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; } } } }
Я сделал без статического класса, можно задать цвета через объектную переменную. 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()); } }
Задачи оказались не такими легкими, как мне показалось на первый взгляд. Первую осилила с горем пополам через статический класс, не знаю правда, проходит ли такое решение. Вторую также, но вот пункт про типы, я вообще без единой идеи как реализовать🥲
Сделай уроки по Android разработке. Они намного интереснее. Или же как создать сервер с базой данных для мобильного приложения, желательно сервак на java.
@@selfedu_rus очень жаль, что у ваших уроков по java мало просмотров, вы лично для меня находка. У меня есть мнение, что это связано с тем, что в ваших уроках мало прикладного, т.к. в основном людям нужно видео с решением их конкретной проблемы, а не видео с фундаментальными основами, но в этом их заблуждение. Не бывает волшебной пилюли, решение любой задачи должно идти через осознание основ языка и подходов к разработке. Также думаю вы имели бы успех, если бы выпустили серию обучающих видео по популярным направлениям, таким как автоматизированное тестирование или создание клиент серверного приложения, т.к. если коротко то я пришел к вам на канал из интереса к автоматизированному тестированию веб приложений. Но из-за того, что большинство уроков на эту тему не раскрывают особенности языка java, то я был вынужден искать более фундаментальное знания, чтобы не быть обезьянкой, которая только и знает как вызвать метод сторонней библиотеки, а быть в состоянии создать, что то свое. UPD: не заметил, что у вас есть уже серия по DjanGo фреймворку для веба. Хотел бы пожелать вам не отчаиваться, а продолжать творить, пускай даже и для узкой аудитории. Уверен, что успех к вам еще прийдет. Ну и конечно, контент о программировании не имеет такого успеха как видео про выживание в лесу в домике из стрейч пленки. Поэтому возможно надо искать выход к аудитории через онлайн менторство или еще как то. Всеравно большая благодарность Вам за ваш труд!
@@selfedu_rus Учу джаву уже пол года, но такого четкого и внятного объяснения я не встретил. После ваших роликов у меня сложилось впечатление , что у меня только поверхностные знания. Вы закладывайте хороший фундамент и очевидно , Вы знаете о чем вы говорите. Спасибо Вам за проделанную работу и предоставляете все это в свободный доступ!
мы определяем несколько конструкторов, поэтому, если не прописать конструктор без параметров, то потом не сможем создать объект, не передавая никаких аргументов. Для этого он и определен.
За полгода, что я пытаюсь выучить ООП и понять, хоть что-то в этом, извините, свинарнике, потому что логики очередности я тут не наблюдаю совсем, я успел выучить испанский. Наверное, не стоит пытаться дальше, претензий к коду у меня больше, чем удовольствия, более нелогичного, чем программирование я в жизни не встречал. 11:42 и что? А d2.run(); мы спокойно вызываем, хотя это класс Foot. Кроме того, d у нас это и есть Dog. Короче, нафиг.
Спасибо! Очень доступно! Ваша ручка просто безподобная!
Большое спасибо за крутые уроки. Очень помогает разобраться в Джаве!
Это уже посложнее. Надо еще раз пересмотреть.
Нужно было создать больше методов с одинаковым названием run(), разнести их по разным местам с разными модификаторами доступа.
Можно еще рефлексию добавить и lombok.
Потому, что начинающие должны страдать при попытке разобраться - что от чего зависит, и что откуда вызывается.
Категорически не согласна. Показано, как ОБЫЧНО выглядит код, но подробно объясняют, что есть что. Что назвать можно одинаково, но понимание процесса дает ответ, метод какого класса вызываем; куда переходит программа, что там встречает и запускает. Спасибо большое! У меня пока получается совершить все подвиги.
Спасибо. Было б интересно где-то представить решение задания, которое в завершении этого урока. И конечно о нем мнение.
Какое чёткое изложение, спасибо!)
Автор молодец. Только я никогда не понимал зачем нужны вложенные классы и сейчас не понимаю... "Простое лучше сложного".
Тебе нужен конкретный объект конкретного класса, но его область видимости не должна распространяться на весь проект, этот объект имеет смысл только в контексте какого-то другого объект ноги "внутри" собаки. Вне собаки объект ноги не нужен, поэтому класс делается внутренним чтобы работать с ним как с классом применять принципы ООП, но "запечатанным" внутри контекста другого класса. Это сделано для удобства. Если ты вынесешь класс ноги собаки в отдельный файл и потом в классе собаки просто сделаешь поле ноги собаки, и будешь так же работать то Абсолютно ничего не испортишь. Но! Когда у тебя в проекте будет 100-150 классов хочется такая чрезмерная декомпозиция на классы начинает раздражать и мешать.
Подача материала хорошая!
Лайк если тоже засмеялся с "У любой стандартной собаки должны быть ноги"
хорош, спасибо
Мой пример реализации второго подвига
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));
}
}
А я написал в методе run класса Dog как Вы и сказали: System.out.println("foot.name");
Но никакой ошибки не выдало. Просто вывело ещё и имя локальной собачки. Какой сложный язык, у меня даже это не получается ((((((
Но преподает Вы классно, спасибо!!! И с Наступающим.
Спасибо! Поле name должно быть приватным, тогда получить доступ из вне не получится. Это железобетонно - основы инкапсуляции ООП ))
Люди!!!=) помогите плиз по первой задаче -можно ли при создании объекта сразу задать параметры вложенного класса через объект "наружнего" класса? а то я только смог через отдельное создание статического объекта вложенного класса и передачи этой ссылки в класс 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;
}
}
}
}
Я сделал без статического класса, можно задать цвета через объектную переменную.
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());
}
}
Задачи оказались не такими легкими, как мне показалось на первый взгляд. Первую осилила с горем пополам через статический класс, не знаю правда, проходит ли такое решение. Вторую также, но вот пункт про типы, я вообще без единой идеи как реализовать🥲
Решила. Сейчас видео пересмотрела, и думаю, ну все же так очевидно было!
Сделай уроки по Android разработке. Они намного интереснее. Или же как создать сервер с базой данных для мобильного приложения, желательно сервак на java.
Пример реализации задачи 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);
}
}
}
Это конструктор в простых скобочках без названия { } ?
Сделайте пожалуйста урок по Django python
Буду делать, только при наличии интереса к этой теме. Если просмотров будет столько же, что и по Java ООП, то руки опустятся )
@@selfedu_rus продолжай в том же духе
@@selfedu_rus очень жаль, что у ваших уроков по java мало просмотров, вы лично для меня находка. У меня есть мнение, что это связано с тем, что в ваших уроках мало прикладного, т.к. в основном людям нужно видео с решением их конкретной проблемы, а не видео с фундаментальными основами, но в этом их заблуждение. Не бывает волшебной пилюли, решение любой задачи должно идти через осознание основ языка и подходов к разработке.
Также думаю вы имели бы успех, если бы выпустили серию обучающих видео по популярным направлениям, таким как автоматизированное тестирование или создание клиент серверного приложения, т.к. если коротко то я пришел к вам на канал из интереса к автоматизированному тестированию веб приложений. Но из-за того, что большинство уроков на эту тему не раскрывают особенности языка java, то я был вынужден искать более фундаментальное знания, чтобы не быть обезьянкой, которая только и знает как вызвать метод сторонней библиотеки, а быть в состоянии создать, что то свое.
UPD: не заметил, что у вас есть уже серия по DjanGo фреймворку для веба. Хотел бы пожелать вам не отчаиваться, а продолжать творить, пускай даже и для узкой аудитории. Уверен, что успех к вам еще прийдет. Ну и конечно, контент о программировании не имеет такого успеха как видео про выживание в лесу в домике из стрейч пленки. Поэтому возможно надо искать выход к аудитории через онлайн менторство или еще как то. Всеравно большая благодарность Вам за ваш труд!
@@selfedu_rus Учу джаву уже пол года, но такого четкого и внятного объяснения я не встретил. После ваших роликов у меня сложилось впечатление , что у меня только поверхностные знания. Вы закладывайте хороший фундамент и очевидно , Вы знаете о чем вы говорите. Спасибо Вам за проделанную работу и предоставляете все это в свободный доступ!
вторая задача решена так:
мейн:
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;
}
}
а зачем нам конструктор Dog, который ничего не делает?
мы определяем несколько конструкторов, поэтому, если не прописать конструктор без параметров, то потом не сможем создать объект, не передавая никаких аргументов. Для этого он и определен.
@@selfedu_rus спасибо
За полгода, что я пытаюсь выучить ООП и понять, хоть что-то в этом, извините, свинарнике, потому что логики очередности я тут не наблюдаю совсем, я успел выучить испанский. Наверное, не стоит пытаться дальше, претензий к коду у меня больше, чем удовольствия, более нелогичного, чем программирование я в жизни не встречал.
11:42 и что? А d2.run(); мы спокойно вызываем, хотя это класс Foot. Кроме того, d у нас это и есть Dog. Короче, нафиг.
Зачем говорить экземпляр класса, можно же по простому - объект такого-то класса
это синоним, я говорю и так и так