Тимур Машнин

Объектно-ориентированное программирование на Java. Платформа Java SE


Скачать книгу

этот метод в производных классах.

      Таким способом можно делать разные вещи в зависимости от класса.

      Здесь мы видим разные строки, возвращаемые методом toString.

      Так как класс Vehicle является общим для этих классов, нам может вообще не понадобится строка, которая возвращается его методом toString.

      В этом случае мы можем вообще не определять тело для метода toString в классе Vehicle.

      Мы можем это сделать, и метод без тела называется «абстрактным».

      Абстрактные методы обозначаются с помощью ключевого слова «абстрактный» в определении.

      И класс с хотя бы одним абстрактным методом называется «абстрактным классом».

      Здесь мы видим ключевое слово абстрактный в определении абстрактного класса.

      Таким образом, абстрактный метод – это метод без тела.

      Конструкторы, статические методы и финальные методы не могут быть абстрактными.

      Абстрактный класс – это класс, в котором некоторые методы абстрактные, а некоторые – нет.

      Абстрактный класс – это незавершенный класс, и мы не можем создать его объекты.

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

      Абстрактный класс может быть расширен до класса, или до другого абстрактного класса.

      Кроме того, вы можете определить класс как абстрактный даже без абстрактного метода.

      Это допускается, и вы можете это сделать для предотвращения возможности создания экземпляра класса.

      Однако, если есть абстрактный метод, вы получите ошибку, если вы не добавите ключевое слово «abstract» в определение класса.

      Таким образом, абстрактные методы помогают разделить определение метода от поведения метода.

      А абстрактные классы – это незавершенные классы, которые содержат абстрактные методы.

      В абстрактном классе могут быть и абстрактные методы, а также обычные методы.

      Теперь вопрос в том, что, если мы сделаем все методы абстрактными.

      Но класс со всеми абстрактными методами уже не является абстрактным классом.

      Это нечто другое.

      Если все методы абстрактны, мы называем это интерфейсом.

      Обратите внимание, что во всех методах нет тел.

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

      Кроме того, мы объявляем методы публичными, но нам не нужно писать это явно.

      Таким образом, все методы автоматически объявляются публичными, даже если мы не укажем ключевое слово public.

      На самом деле не совсем верно, что все методы в интерфейсе должны быть абстрактными.

      В Java 8 могут быть методы с телом, но они должны быть статическими методами или методами по умолчанию.

      Но мы не будем