Знакомство с ООП

  • 18
  • Недоступен
Знакомство с ООП

18
Опрос
Знакомство с ООП,  18 уровень,  9 лекция
Недоступен
Знакомство с ООП
Знакомство с ООП
Комментарии (14)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Валерий Backend Developer в Mriya Resort&Spa
10 октября 2021, 14:56
Можно ли в переменную класса-наследника присвоить ссылку на объекта базового класса? Ответил, что можно при условии, что нужно выполнить явный каст. Опрос показал не верный ответ...
public class Main {
    public static void main(String[] args) {
        Animal animal = new Animal();
        Cat cat = (Cat) animal;
        cat.sound();
    }
}
В IDE проверил, все работает
Ada
Уровень 46
9 мая, 09:11
Я так понимаю, тут речь об этом:
Animal animal = new Cat(); — так можно
Cat cat = new Animal(); — так нельзя
Anonymous #2539565
Уровень 51
10 июля 2021, 17:58
исправьте во втором вопросе, в варианте ответа: Да, но нуЖно явно указать приведение типа (пропущена буква "ж"). В шестом вопросе так же неверное слово - Создать объекты абстрактного класса...
4 июля 2021, 18:09
Подскажите, для чего используется переменная super?
Edil Kalmamatov
Уровень 35
22 июня, 12:40
Для вызова родительского конструктора, методов либо обращение к родительским параметрам, измененным в потомке. Вызов родительского конструктора полезен для исключения дублирования действий. Пример:
public class A{
   private String a;
   private int b;
   public A(String a, int b){
      this.a=a;
      this.b=b;
   }
}

public class B extends A{
   private double c;
   public B(String a, int b, double c){
      super(a,b);
      this.c=c;
   }
}
Без использования super пришлось бы заново описывать присвоение a и b. Второй случай, когда нужно обратиться к параметру родительского класса, например при затирании его в потомке
public class A{
   private String a;
   public A(String a){
      this.a=a;
   }
   public void print(){
      System.out.println("A.a = "+a);
   }
}

public class B extends A{
   private int a;
   public B(int a){
      this.a=a;
      super.a="текст";
   }
   public void print(){
     super.print();
      System.out.println("B.a = "+a);
   }
}
K.
Уровень 39
21 июня 2021, 15:26
В шестом вопросе опечатка: абсстрктного вместо абстрактного
Владислав Журавский веб программист в фриланс
16 июня 2021, 08:25
И почему в переменную класса-наследника нельзя присвоить ссылку на объекта базового класса? Я могу создать базовый класс Cat и класс-наследник Tiger в классе. В классе Tiger создаю переменную с типом Cat и спокойно передаю туда ссылка на объект класса-наследника
K.
Уровень 39
12 июля 2021, 05:34
Так вы сами пишете "В классе Tiger создаю переменную с типом Cat и спокойно передаю туда ссылка на объект класса-наследника". А в вопросе спрашивается, а в вопросе "Можно ли в переменную класса-наследника присвоить ссылку на объект базового класса?"
Anonymous #2749315 Frontend Developer
31 августа 2021, 16:51
На "слух", действительно, бывает сложно понять суть вопроса. Открываем IDE и сразу становится всё понятно: // Tiger.java class Cat {} public class Tiger extends Cat { public static void main(String[] args) { System.out.println("Поехали..."); Tiger tiger = new Tiger(); // переменная наследника Cat cat1 = new Cat(); // переменная базового класса Cat cat2 = new Cat(); // переменная базового класса cat1 = tiger; // так можно // tiger = cat2; // если раскомментировать, то будет ошибка компиляции tiger = (Tiger) cat2; // ошибка во время исполнения // (строка "...приехали." не выведется, хоть код и скомпилируется) System.out.println("...приехали."); } }
Владислав Журавский веб программист в фриланс
16 июня 2021, 08:22
Что вообще не так с вопросом "Что не может дать инкапсуляция"? Как по мне ответ про валидацию внутреннего состояния объекта и ответ с про контроль устанавливаемых значений кажется верным, но это не так
Mick
Уровень 23
25 августа 2021, 11:03
Все с ним как раз так. В этом вопросе нужно выбрать, что НЕ может дать инкапсуляция. Первые 3 варианта она может дать, а 4-й - нет, по этому 4-й и будет правильным ответом. Так что вам правльно кажется, что и валидация состояния и контроль значений подходят))
Валерий Backend Developer в Mriya Resort&Spa
10 октября 2021, 15:04
Согласен, варианты ответа какие-то воздушные и расплывчатые. В ступор вводят. Типо ошибка компиляции... Или внутренняя реализация класса... что вообще? причем здесь это.
Что нельзя делать с интерфейсом? (выберите неверное утверждение) Погуглил и вроде бы можно создавать анонимный объект класса. Там есть new interfaceName() вот здесь обсуждение этого случая Мне кажется некорректным вопрос. Ну и опечаток тьма, не аккуратно..(
Edil Kalmamatov
Уровень 35
22 июня, 12:57
Вопрос корректен. Вы правильно написали насчет анонимных классов. Анонимный класс != интерфейс. Такой вызов предполагает описания задекларированных методов интерфейса в месте инициализации. Т.е. создается не экземпляр интерфейса, а экземпляр анонимного класса, наследующего интерфейс. Поэтому нельзя просто создать:
public interface SomeInterface
{
   public void SomeMethod();
}
public class MyClass{
   ...
   SomeInterface a = new SomeInterface();
   ...
}
Должно быть описано тело класса:
public interface SomeInterface
{
   public void SomeMethod();
}

public class MyClass{
   ...
   SomeInterface a = new SomeInterface(){
      // это тело анонимного класса
      public void SomeMethod(){
         // здесь описывается реализация метода
      }
     ...
   }
}