В чем разница между абстрактным классом и классом, который имеет все свои абстрактные методы?

интересно, в чем разница в Java между аннотация класс и класс, который имеет все свои методы аннотация? Я имею в виду, это аннотация класс, просто класс, методы которого автоматически получаете аннотация?

5 ответов


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

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


любой класс, содержащий один или несколько абстрактных методов, также должен быть объявлен абстрактным. Чтобы объявить абстрактный класс, просто используйте ключевое слово abstract перед ключевым словом class в начале объявления класса. Не может быть объектов абстрактного класса. То есть абстрактный класс не может быть непосредственно создан с помощью оператора new. Такие объекты были бы бесполезны, потому что абстрактный класс не полностью определен. Кроме того, нельзя объявлять абстрактными конструкторы, или абстрактные статические методы. Любой подкласс абстрактного класса должен либо реализовать все абстрактные методы суперкласса, или быть объявлен абстрактным.


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


всякий раз, когда вы делаете абстрактный метод в классе, вы явно упоминаете ключевое слово abstract перед именем класса, как это

public abstract class Test {

abstract void show();

}

вот точки, связанные абстрактный класс в Java

-->абстрактный класс-это класс, который нельзя инстанцировать.

-->Если вы хотите получить реализацию любого метода из дочернего класса (другой человек), то абстрактный метод может использоваться в этом чувство.

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

-->вы можете достичь абстракции, которая является основным столпом ООП через "абстрактные классы". Абстракция скрывает несущественные детали объекта.

-->абстрактное использование for-это отношение (наследование).

-->использование абстракции для достижения Полиморфное поведение (еще один основной столп ООП)

-->абстрактный класс не должен быть частным и не содержать закрытый метод.

-->вы расширяете один абстрактный класс не несколько, потому что Java-это одно поддерживаемое наследование

--> абстрактный класс должен содержать 1 или более 1 абстрактный метод

-->Если какой-либо класс содержит абстрактный метод, он должен явно объявить абстрактный класс, даже если он содержит конкретный метод.

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

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

-->попытка создать экземпляр объекта абстрактного класса является ошибкой компиляции.

-->абстрактная переменная суперкласса может содержать ссылку на дочерний конкретный объект.


класс, содержащий ключевое слово abstract в объявлении, называется абстрактный класс.

  • абстрактные классы могут содержать или не содержать абстрактные методы ie., методы без тела (public void get ();)
  • но если класс имеет хотя бы один абстрактный метод, то класс должен быть объявлен абстрактным.
  • если класс объявлен абстрактным ,он не может быть инстанцирован.
  • использовать абстрактный класс, вы должны наследовать от другого класса, обеспечивающих реализацию абстрактных методов в нем.
  • если вы наследуете абстрактный класс, вы должны предоставить реализации всем абстрактным методам в нем.

Если вы не хотите, чтобы обеспечить реализацию всех абстрактных методов, то есть концепция of адаптер класс: Пример:

abstract class A{
    public void m1();
    public void m2();
    public void m3();
    }

class B extends A{
    public void m1(){}
    public void m2(){}
    public void m3(){}
    }


class C extends B{
    public void m2(){
       System.out.println("Hello m2");
       }
    public static void main(String args){
     C obj=new C();
    C.m2();
    }
    }