В чем разница между абстрактным классом и классом, который имеет все свои методы абстрактными?
Интересно, какая разница в Java между абстрактным классом и классом, у которого все его методы абстрактны? Я имею в виду, является ли абстрактный класс просто классом, методы которого автоматически становятся абстрактными?
Ответы
Ответ 1
Абсолютно нет. Действительно, класс может быть абстрактным, без каких-либо абстрактных методов, хотя это относительно редко (см. Комментарий на примере ниже). С другой стороны, если класс имеет какие-либо абстрактные методы, то он должен быть объявлен абстрактным.
Вообще говоря, цель абстрактного класса состоит в том, чтобы предоставить скелет с некоторым не абстрактным поведением, но другие биты еще должны быть заполнены подклассами. Например, это можно использовать с шаблоном шаблона .
Ответ 2
Любой класс, содержащий один или несколько абстрактных методов, также должен быть объявлен абстрактным. Чтобы объявить абстрактный класс, вы просто используете ключевое слово abstract перед ключевым словом класса в начале объявления класса. Не может быть объектов абстрактного класса. То есть абстрактный класс не может быть непосредственно создан с новым оператором. Такие объекты бесполезны, потому что абстрактный класс не полностью определен. Кроме того, вы не можете объявлять абстрактные конструкторы или абстрактные статические методы. Любой подкласс абстрактного класса должен либо реализовывать все абстрактные методы в суперклассе, либо быть объявлен абстрактным.
Ответ 3
Единственное различие между абстрактным классом и интерфейсом заключается в том, что абстрактный класс может быть унаследован, а в то время как интерфейсы не могут, поэтому интерфейсы не имеют никаких конструкторов обратно с абстрактным классом.
Ответ 4
Всякий раз, когда вы создаете абстрактный метод в классе, вы явно указываете ключевое слово abstract перед именем класса, точно так же, как это
public abstract class Test {
abstract void show();
}
Вот связанные с точки зрения абстрактные классы в Java
- > Абстрактный класс является классом, который не может быть создан.
- > Если вы хотите получить реализацию какого-либо метода из дочернего класса (другого человека), тогда абстрактный метод может использовать в этом смысле.
- > Абстрактный класс неполный, подкласс должен объявить недостающую часть, чтобы стать конкретным классом (класс, объект которого может быть создан), в противном случае этот подкласс также станет абстрактным классом.
- > Вы можете достичь абстракции, которая является основной опорой ООП через "абстрактные классы".
Абстракция скрывает нерелевантную деталь объекта.
- > Абстрактное использование для отношения IS (Наследование).
- > Использование абстракции для достижения Полиморфного поведения (Другой основной столп ООП)
- > абстрактный класс не должен быть закрытым и не содержать закрытый метод.
- > Вы выделяете один абстрактный класс не кратно, потому что Java Single поддерживается наследование
- > Абстрактный класс должен содержать 1 или более 1 абстрактный метод
- > Если какой-либо класс содержит абстрактный метод, он должен явно объявлять абстрактный класс, даже если он содержит конкретный метод.
- > Конструктор и статический метод не могут быть объявлены как абстрактные, поскольку конструктор не наследуется.
- > Если дочерний класс не реализует абстрактный метод суперкласса, он становится также абстрактным классом.
- > Попытка создать экземпляр объекта абстрактного класса является ошибкой компиляции.
- > Абстрактная переменная суперкласса может содержать ссылку на дочерний конкретный объект.
Ответ 5
Класс, содержащий ключевое слово abstract в его объявлении, известен как абстрактный класс.
- Абстрактные классы могут содержать или не содержать абстрактные методы , т.е. методы с внешним телом (public void get();)
- Но если класс имеет хотя бы один абстрактный метод, тогда класс должен быть объявлен абстрактным.
- Если класс объявлен абстрактным, он не может быть создан.
- Чтобы использовать абстрактный класс, вам необходимо наследовать его из другого класса, обеспечить реализацию абстрактных методов в нем.
- Если вы наследуете абстрактный класс, вы должны обеспечить реализацию всех абстрактных методов в нем.
-
Если вы не хотите предоставлять реализацию для всех абстрактных методов, то существует концепция класса адаптера:
Пример:
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();
}
}