Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
Andrey53791
Member

Откуда:
Сообщений: 32
Есть 2 класса. Calculator и My_Calculator, меня интересует, какая разница во 2 классе, если бы вместо этой инструкции Calculator cal = new My_Calculator();
была бы эта инструкция: Calculator cal = new Calculator ();
Разницы же никакой, и на мой взгляд проще будет этот вариант
Calculator cal = new Calculator ();
или для кого что удобнее? сталкивался с вопросами на собеседовании, но разницы никакой не вижу.




//класс 1
class Calculator {
int c;

public void addition(int a, int b) {
c = a + b;
System.out.println("Сумма чисел: " + c);
}

public void subtraction(int a, int b) {
c = a - b;
System.out.println("Разность чисел: " + c);
}
}

//класс 2
public class My_Calculator extends Calculator{
public void multiplication(int a, int b) {
c = a * b;
System.out.println("Произведение чисел: " + c);
}

public static void main(String args[]) {
int a = 10, b = 20;
Calculator cal = new My_Calculator();
cal.addition(a, b);
cal.subtraction(a, b);
}
}
20 июл 19, 21:33    [21931009]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
У тебя в май калькуляторе могут быть пере определены методы тогда объект класса калькулятор будет вести себя иначе чем если ты его инстанциируешь через нью калькулятор
20 июл 19, 22:02    [21931015]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
Sergunka
Member

Откуда: Bay Area, CA
Сообщений: 1973
andreykaT
У тебя в май калькуляторе могут быть пере определены методы тогда объект класса калькулятор будет вести себя иначе чем если ты его инстанциируешь через нью калькулятор


Так как на практике это часто случается, но входит в противоречие с базовым принципом ООП сформулированного Барбарой Лисковой

Роберт С. Мартин определил[3] этот принцип так:

Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом.

https://ru.wikipedia.org/wiki/Принцип_подстановки_Барбары_Лисков


Видимо это из ТС пытались выманить на интервью
21 июл 19, 00:37    [21931068]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
Буквы солидаи можно трактовать и так и сяк и Холи варить на эту тему кто правее. Типа системы должны быть открыты для добавления функционала но не для изменения. Ты конечно же думаешь что они намекают что потомки не должны оверрайдить методы родителей да?
21 июл 19, 08:42    [21931103]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
Sergunka
Member

Откуда: Bay Area, CA
Сообщений: 1973
andreykaT
Буквы солидаи можно трактовать и так и сяк и Холи варить на эту тему кто правее. Типа системы должны быть открыты для добавления функционала но не для изменения. Ты конечно же думаешь что они намекают что потомки не должны оверрайдить методы родителей да?


На самом деле это исключительно для интервью вопрос. В реальной жизни понятно, что заоверидю без сожаления и любого другого осуждать не буду.

Сами принципы SOLID хороши понятно для разработки и то да се. Но если надо, то и синус может быть выше единицы.
21 июл 19, 09:12    [21931109]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mayton
Member

Откуда: loopback
Сообщений: 42508
andreykaT
Буквы солидаи можно трактовать и так и сяк и Холи варить на эту тему кто правее. Типа системы должны быть открыты для добавления функционала но не для изменения. Ты конечно же думаешь что они намекают что потомки не должны оверрайдить методы родителей да?

Видимо его спросили это
если бы вместо этой инструкции Calculator cal = new My_Calculator();
была бы эта инструкция: Calculator cal = new Calculator ();

и он не смог ответить.

Я помню что в универе на 1м курсе я тоже не понял мотивации к использованию ООП и полиморфизма.
Я к тому времени неплохо знал Basic, Pascal, Assembler и тоже имел "свой" взгляд на вещи.

А тут? Как ткнуть носом доказательство? Этож не теорема мать ево Пифагора. Просто best practices.
Или так называемые философии программинга. Всякие Киссы. Солиды и Ягни. Попробуй их докажи
когда математики нет. Это не тождество что слева там нолик и справа доказано что нолик.

Да и вообще некоторым людям нужен отрезок времени длиной в жизнь чтобы понять какие-то
истины. Зачем женился например? Тоже вроде как безсмысленная тема. Женидьба.... Мдя.
21 июл 19, 10:38    [21931122]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2149
не понял пример.
Второй класс добавил метод который не нужен и не используется.
Значить и сам второй класс не нужен.
В чём подвох?
21 июл 19, 10:56    [21931127]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
забыл ник
Member

Откуда:
Сообщений: 3024
mayton
А тут? Как ткнуть носом доказательство? Этож не теорема мать ево Пифагора. Просто best practices.
Или так называемые философии программинга. Всякие Киссы. Солиды и Ягни. Попробуй их докажи
когда математики нет. Это не тождество что слева там нолик и справа доказано что нолик.

Вот именно про это я и говорил в предыдущем топике, все эти SOLID и тд - лишь костыли, призванные улучшить изначально корявую философию ООП
21 июл 19, 11:51    [21931145]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
PetroNotC Sharp
не понял пример.
Второй класс добавил метод который не нужен и не используется.
Значить и сам второй класс не нужен.
В чём подвох?

если в дебри не вдаваться имхо надо сказать что и как себя будет вести и в чем в конце-концов различия. чела спросили - в чем разница. але. а тут народ уже в философию ударился.

какие то там лисковы, солиды и всё прочее.
21 июл 19, 15:14    [21931193]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
Sergunka
Member

Откуда: Bay Area, CA
Сообщений: 1973
Andrey53791
Есть 2 класса. Calculator и My_Calculator, меня интересует, какая разница во 2 классе, если бы вместо этой инструкции Calculator cal = new My_Calculator();
была бы эта инструкция: Calculator cal = new Calculator ();
Разницы же никакой, и на мой взгляд проще будет этот вариант
Calculator cal = new Calculator ();
или для кого что удобнее? сталкивался с вопросами на собеседовании, но разницы никакой не вижу.


Разница на самом деле есть

инициализация класса Calculator cal = new My_Calculator(); будет идти дольше и памяти займет больше

Вам видимо надо было тупо ответить типо Принцип Барбары Лисков соблюден, работать будет дольше, но так же.

В общем на интервью часто всякие придурки встречаются надо действовать по обстоятельтсвам и быть на чеку как в песне у Владимира Семеновича

Но могут действовать они не прямиком,
Шасть в купе, и притвориться мужиком.
А сама наложит тола под корсет...
Ты проверяй, какого пола твой сосед
21 июл 19, 21:32    [21931326]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mini.weblab
Member

Откуда:
Сообщений: 687
вообще-то, я тоже не поняла по поводу Calculator cal = new My_Calculator()

в С++, если переопределить методы Калькулятора в МайКалькуляторе, то, условно говоря, калькулятор инициализированный как

Calculator *cal = new My_Calculator()
будет себя вести как калькулятор (и не будет использовать оверлоад методы)
Calculator *cal = new Calculator();
21 июл 19, 22:37    [21931354]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mini.weblab
Member

Откуда:
Сообщений: 687
Sergunka
Разница на самом деле есть
инициализация класса Calculator cal = new My_Calculator(); будет идти дольше и памяти займет больше
а вот это похоже на правду :)
21 июл 19, 22:40    [21931356]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
Sergunka
Andrey53791
Есть 2 класса. Calculator и My_Calculator, меня интересует, какая разница во 2 классе, если бы вместо этой инструкции Calculator cal = new My_Calculator();
была бы эта инструкция: Calculator cal = new Calculator ();
Разницы же никакой, и на мой взгляд проще будет этот вариант
Calculator cal = new Calculator ();
или для кого что удобнее? сталкивался с вопросами на собеседовании, но разницы никакой не вижу.


Разница на самом деле есть

инициализация класса Calculator cal = new My_Calculator(); будет идти дольше и памяти займет больше

Вам видимо надо было тупо ответить типо Принцип Барбары Лисков соблюден, работать будет дольше, но так же.

В общем на интервью часто всякие придурки встречаются надо действовать по обстоятельтсвам и быть на чеку как в песне у Владимира Семеновича

Но могут действовать они не прямиком,
Шасть в купе, и притвориться мужиком.
А сама наложит тола под корсет...
Ты проверяй, какого пола твой сосед


насколько больше второй вариант подъест памяти?
насколько это принципиально?

вы слышали про ковариантность и инвариантность?

что вы с этим лисковым пристали? весь солид - это лишь набор РЕКОМЕНДАЦИЙ. причем, местами весьма спорный.
21 июл 19, 22:42    [21931358]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
mini.weblab
Sergunka
Разница на самом деле есть
инициализация класса Calculator cal = new My_Calculator(); будет идти дольше и памяти займет больше
а вот это похоже на правду :)

если ты пишешь классы и строишь приложение так что у тебя один класс отъедает какие то невнятные объемы - то тут уже явно не до способов инициализации объектов. а о кое-чем другом заботиться надо.
21 июл 19, 22:44    [21931360]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mini.weblab
Member

Откуда:
Сообщений: 687
вопрос-то был на теорию, и я подумала, что тоже не смогла бы на него ответить.
вообще-то, в подобных случаях, я говорю, что ответа не знаю, и прошу интервьюера подсказать правильный ответ.
21 июл 19, 23:00    [21931367]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mayton
Member

Откуда: loopback
Сообщений: 42508
Вот еще такой вариант ответа.

К сообщению приложен файл. Размер - 10Kb
21 июл 19, 23:12    [21931370]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
Sergunka
Member

Откуда: Bay Area, CA
Сообщений: 1973
mini.weblab
вопрос-то был на теорию, и я подумала, что тоже не смогла бы на него ответить.
вообще-то, в подобных случаях, я говорю, что ответа не знаю, и прошу интервьюера подсказать правильный ответ.


Это довольно обычная стратегия и обычно всегда срабатывает. Так как вопрос, очевидно, с подвохом, то проще подыграть интервьюверу так как если правильно ответить это может только разодорить неокрепший разум

Вон как коллега возбудился только от упоминания Барбары
22 июл 19, 00:18    [21931392]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 2149
mini.weblab
и не будет использовать оверлоад методы
их нет в примере. Что об этом разговаривать?
В плюсах около 80 методов инициализации класса).
22 июл 19, 00:35    [21931394]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
Вопросы с подвохом это говно вопросы потому что задаваемый с ними сам может сесть в лужу. Показав некомпетентность. Вон как коллега чуть выше
22 июл 19, 09:23    [21931443]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mayton
Member

Откуда: loopback
Сообщений: 42508
Самый что ни на есть good way это на собеседовании показать фрагмент рабочего кода из проекта и обсудить его.
Во первых - свежий взгляд со стороны. Во вторых еще раз исполнить duck debugging, и самому проговорить свой код.
Возможно после этого и новые идеи пойдут. Не боги... как говорицца горшки обжигают.

Синтетические задачи наподобие обедающих философов или спящих парикмахеров интересны только теоретикам.
И далеки от практических задач которые могут возникнуть. Я к слову сам не уверен что смогу без подготовки
пояснить в чём проблема парикмахера и почему она вынесена как отдельный пункт среди проблем
concurrency/parallelism.

Вобщем нужна подготовка.
22 июл 19, 10:19    [21931473]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
mayton
Самый что ни на есть good way это на собеседовании показать фрагмент рабочего кода из проекта и обсудить его.
Во первых - свежий взгляд со стороны. Во вторых еще раз исполнить duck debugging, и самому проговорить свой код.
Возможно после этого и новые идеи пойдут. Не боги... как говорицца горшки обжигают.

Синтетические задачи наподобие обедающих философов или спящих парикмахеров интересны только теоретикам.
И далеки от практических задач которые могут возникнуть. Я к слову сам не уверен что смогу без подготовки
пояснить в чём проблема парикмахера и почему она вынесена как отдельный пункт среди проблем
concurrency/parallelism.

Вобщем нужна подготовка.

Да. к любому собесу в принципе неплохо бы подготовиться. просто с филосовскими вопросами можно не сойтись в некоторых аспектах с собеседующим. и если он малоадекватный, то ты в его глазах еще и дураком будешь впрочем, он в твоих будет самодуром как минимум.

это к теме лисковых и строгих убеждений.
22 июл 19, 12:33    [21931634]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
mayton
Самый что ни на есть good way это на собеседовании показать фрагмент рабочего кода из проекта и обсудить его.
Во первых - свежий взгляд со стороны. Во вторых еще раз исполнить duck debugging, и самому проговорить свой код.
Возможно после этого и новые идеи пойдут. Не боги... как говорицца горшки обжигают.

Синтетические задачи наподобие обедающих философов или спящих парикмахеров интересны только теоретикам.
И далеки от практических задач которые могут возникнуть. Я к слову сам не уверен что смогу без подготовки
пояснить в чём проблема парикмахера и почему она вынесена как отдельный пункт среди проблем
concurrency/parallelism.

Вобщем нужна подготовка.

я кстати в какой то презенташке с тусы типа джейпойнта смотрел эту тему с философами и канкарренси. ну кароче ))) если долго втыкать то проблему наверное поймешь но это такая муть. ее хорошо знать для саморазвития и умения умничать на собесах.
22 июл 19, 12:35    [21931636]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
andreykaT
Member

Откуда:
Сообщений: 2421
это так же как обсасывание всяких принципов. которых не имеют четких требований и четких границ и вылупляется куча умников которые 100% уверены что именно их очерченные границы - самые правильные ))
22 июл 19, 12:36    [21931638]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mayton
Member

Откуда: loopback
Сообщений: 42508
Ну они поэтому и называются философией разработки.

Я вот думаю если математик читает этот топик - он ни фига не поймет. И ещё больше убедится что программисты это шарлатаны. Любят по Фарисейски судить чужой код при этом опираясь на труды какой-то старухи Варвары.

Мдя. Для
22 июл 19, 12:52    [21931658]     Ответить | Цитировать Сообщить модератору
 Re: Создание объекта Java Сабкласс = new Родитель(); разница с Сабкласс = new Сабкласс ();  [new]
mayton
Member

Откуда: loopback
Сообщений: 42508
Для математика нужна формула.
22 июл 19, 12:53    [21931659]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Java Ответить