Подтвердить что ты не робот

Использование абстрактного класса без абстрактных методов

Абстрактный класс не должен содержать абстрактных методов.

Есть ли другая причина для создания абстрактного класса, кроме того, что абстрактные классы не могут быть созданы?

4b9b3361

Ответ 1

Основная роль абстрактного класса заключается в предоставлении соответствующего корневого класса, из которого могут быть получены конкретные (не абстрактные) подклассы. Это мощная и универсальная функция, которая способствует повторному использованию кода. Абстрактные классы инкапсулируют общие функции, общие для ряда типов данных - функции, которые являются слишком общими, чтобы иметь смысл в абстрактном классе, но которые могут быть переопределены в подклассе

Любой класс с абстрактным методом автоматически абстрагируется и должен сам определять себя как ключевое слово abstract - интересно, абстрактный класс не должен содержать абстрактных методов

Абстрактный класс не может быть инстанцирован - другими словами, вы не можете создавать экземпляры (объекты) абстрактного класса

Ссылки на объекты абстрактного класса могут быть объявлены, даже если объекты абстрактных классов не могут быть созданы, например Account a; не будет генерировать синтаксическую ошибку

Если подкласс абстрактного класса переопределяется, то есть обеспечивает реализацию каждого абстрактного метода в его суперклассе, подкласс называется конкретным классом, и объекты подкласса могут быть созданы

Если подкласс абстрактного класса не переопределяет (реализует) все абстрактные методы, которые он наследует, этот подкласс также является абстрактным и должен быть объявлен как таковой

Ответ 2

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

Ответ 3

Вы можете сделать класс абстрактным, даже если вы не хотите реализовывать все методы интерфейса, которые реализует класс. Согласно java docs.

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

В любом случае вы не можете создать экземпляр класса, объявленного с помощью abstract.

Ответ 4

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

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

В этом случае это объявление о том, что супер не полезно для него, и что подклассы будут делать что-то еще, что они будут конкретно объявлять.

Ответ 5

В не абстрактном классе не может быть абстрактной функции!

Итак, если вам нужна абстрактная функция в вашем классе по какой-либо причине, вы должны объявить свой класс абстрактным.

Зачем мне нужна абстрактная функция?

В чем смысл использования абстрактных методов?

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

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

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

Ответ 6

Я извлек ниже пункты Почему я должен объявлять класс абстрактным классом?

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

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

Ответ 7

Абстрактные классы служат в качестве шаблонов для своих подклассов. Например, абстрактное дерево классов и подкласс Banyan_Tree имеет все характеристики дерева, а также характеристики, характерные для дерева баньянов.

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

Ответ 8

В Java у нас может быть абстрактный класс без какого-либо абстрактного метода. Это позволяет нам создавать классы, которые не могут быть созданы, но могут быть унаследованы.

//Абстрактный класс без какого-либо абстрактного метода

abstract class Base {    
    void fun() { System.out.println("Base fun() called"); } 
} 

class Derived extends Base { } 

class Main { 
    public static void main(String args[]) {  
        Derived d = new Derived(); 
        d.fun(); 
    } 
}

Выход:

Base fun() называется