1.​ Каковы 4 основные концепции ООП?

Абстракция, Полиморфизм, Наследование, Инкапсуляция

​​2. Что такое полиморфизм?

Полиморфизм — это способность объекта принимать множество форм. В Java существует два типа полиморфизма, такие как полиморфизм времени компиляции (или статический полиморфизм) и полиморфизм времени выполнения (или динамический полиморфизм).

Полиморфизм времени компиляции — перегрузка методов

Полиморфизм во время выполнения — переопределение метода

​3.​ ​Что такое перегрузка и переопределение методов?

Перегрузка:

Методы имеют одинаковые имена, но разное количество, тип или порядок параметров. Перегрузка определяется во время компиляции.

E.g.

дисплей (имя строки)

дисплей (имя строки, целое число)

дисплей (целое число, имя строки)

Переопределение:

Дочерний класс реализует метод с той же сигнатурой, что и метод родительского класса.

​4. Почему переопределение метода называется динамическим полиморфизмом?

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

В этом случае JVM решает, какой метод вызывать во время выполнения, поэтому это называется динамическим полиморфизмом.

​5. Будет ли возвращаться тип метода, рассматриваемого для перегрузки?

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

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

  • Изменение номера параметра
  • Изменение типа параметра
  • Изменение порядка параметра

6. Можете ли вы переопределить статический метод и закрытый метод в Java?

Нет, мы не можем переопределить статические и частные методы в Java. Но мы можем перегрузить их обоих.

7. Что такое инкапсуляция данных и в чем ее значение?

Инкапсуляция данных связывает данные и функции вместе. Его значение в том, что мы можем скрыть детали реализации от пользователя.

8. Что такое все спецификаторы доступа в Java? Укажите их цели.

Частный: его может использовать только тот же класс.

Общедоступно: любой класс может использовать его.

Защищено: его может использовать тот же класс, а также унаследованный класс.

по умолчанию: его могут использовать только классы в одном пакете.

9. Что такое ковариантный тип возврата?

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

Тип возвращаемого значения, который вы изменяете, должен быть подтипом переопределенного метода.

Если определение немного сбивает с толку, давайте рассмотрим его на примере.

class Student {
}
class BE_CSE_Student extends Student {
   public Student getStudent() {
      return new Student();
   }
}
class ME_CSE_Student extends BE_CSE_Student {
  public CSE_Student getStudent() {
     return new Student();
  }
}

В приведенном выше примере Student — это класс. CSE_Student — это (расширенный) студент. В классе BE_CSE_Student есть метод, называемый getStudent() с возвращаемым типом объекта Student. В классе ME_CSE_Student мы расширяем свойство класса BE_CSE_Student.

Поскольку классы BE_CSE_Student и ME_CSE_Student находятся в отношениях IS A, мы можем переопределить метод getStudent() в классе BE_CSE_Student в ME_CSE_Student.

Для переопределения сигнатура метода должна быть такой же,

public Student getStudent() вернет объект Student, public CSE_Student getStudent() вернет объект CSE_STUDENT.

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

10. Что такое композиция в Java?

Интерфейс представляет отношение IS A, тогда как композиция представляет отношение HAS A.

public Toyota extends Car {
  Engine e = new Engine();
}

Toyota ЯВЛЯЕТСЯ автомобилем, в котором Toyota ИМЕЕТ двигатель. Таким образом, один объект содержит ссылку на другой объект в составе. Без Toyota мы не можем использовать Engine внутри него.

Другой пример для вашего понимания: Сачин играет в крикет, Сачин владеет автомобилем BMW.

Sachin extends Cricketer {
   BMWCar car = new BMWCar();
}

11. Может ли интерфейс реализовать или расширить другой интерфейс?

Один интерфейс может расширить несколько интерфейсов. (Но класс может расширять только один класс).

Интерфейс не может реализовать другой интерфейс. Осуществить означает дать определение. Интерфейс не может определять методы, поэтому интерфейс не может реализовать другой интерфейс.

interface MahindraSUV500 extends Mahindra, SUV, Car {
}

Здесь MahindraSUV500, Mahindra, SUV, Car — все это интерфейсы.

Другие статьи