Ответы:
Конечно.
Объявление абстрактного класса означает только то, что вы не разрешаете создавать его экземпляры самостоятельно.
Объявление абстрактного метода означает, что подклассы должны предоставлять реализацию этого метода.
Это две разные концепции, хотя, очевидно, у вас не может быть абстрактного метода в не абстрактном классе. Вы можете даже иметь абстрактные классы с final
методами, но никогда не наоборот.
Да, ты можешь сделать это. Почему бы тебе просто не попробовать это сделать?
Да, ты можешь. Абстрактный класс, используемый в java, означает, что вы не можете создать объект класса. И абстрактный метод, подклассы должны обеспечивать реализацию этого метода.
Таким образом, вы можете легко определить абстрактный класс без какого-либо абстрактного метода.
Как например:
public abstract class AbstractClass{
public String nonAbstractMethodOne(String param1,String param2){
String param = param1 + param2;
return param;
}
public static void nonAbstractMethodTwo(String param){
System.out.println("Value of param is "+param);
}
}
Это отлично.
ДА. Вы можете создать абстрактный класс без какого-либо абстрактного метода. Лучшим примером абстрактного класса без абстрактного метода является HttpServlet.
Абстрактный метод - это метод, не имеющий тела. Если вы объявили хотя бы один метод в классе, класс должен быть объявлен как абстрактное его обязательное НО, если вы объявили абстрактный класс, необязательно объявлять абстрактный метод внутри класса.
Вы не можете создавать объекты абстрактного класса, что означает, что он не может быть создан.
Да, вы можете объявить класс, который не можете создать сам по себе, с помощью только тех методов, которые уже имеют реализации. Это было бы полезно, если вы хотите добавить абстрактные методы в будущем или если вы не хотите, чтобы класс создавался напрямую, даже если он не имеет абстрактных свойств.
да, мы можем объявить абстрактный класс без какого-либо абстрактного метода. цель объявления класса абстрактным не в том, чтобы создать экземпляр класса.
так что два случая
1) абстрактный класс с абстрактными методами.
этого типа классов, мы должны унаследовать класс от этого абстрактного класса и должны переопределить абстрактные методы в нашем классе, например: GenricServlet class
2) абстрактный класс без абстрактных методов.
этот тип классов, мы должны унаследовать класс от этого абстрактного класса, например: цель класса HttpServlet заключается в том, что если вы не реализуете свою логику в дочернем классе, вы можете получить родительскую логику
Да, у нас может быть абстрактный класс без абстрактных методов, поскольку оба являются независимыми концепциями. Объявление абстрактного класса означает, что он не может быть создан сам по себе и может быть только подклассом. Объявление абстрактного метода означает, что метод будет определен в подклассе.
да, ты можешь это сделать.
объявление абстрактного класса означает, что класс не будет создан каким-либо другим классом.
и внутри должен быть хотя бы один абстрактный метод, и это означает, что вы можете объявить абстрактный метод в этом классе, если вы не объявляете метод, чем это нормально.
пример:
public abstract class abs {
protected int cx = 0, cy = 0;
public void p() {
System.out.print("hello");
}
}
это наверняка сработает.
Да, ты можешь. Иногда вам могут задать вопрос: для чего это нужно? Ответ: иногда нам приходится ограничивать создание экземпляров класса самим по себе. В этом случае мы хотим, чтобы пользователь расширил наш абстрактный класс и создал экземпляр дочернего класса.
Да, вы можете определить абстрактный класс без абстрактного метода. Однако, если внутри нет метода, лучше использовать интерфейс.
Вы можете, я думаю, что вам нужно больше. Сразу скажу, что однозначного и быстрого ответа нет. Делайте то, что нужно в вашей текущей ситуации.
Для меня наследование подразумевает отношения «есть». Представьте себе класс собак, который можно расширить за счет более специализированных подтипов (эльзасский, пудель и т. Д.). В этом случае создание абстрактного класса собак может быть правильным решением, поскольку подтипы - это собаки. А теперь представим, что собакам нужен ошейник. В этом случае наследование не имеет смысла: бессмысленно иметь отношения «есть-а» между собаками и ошейниками. Это определенно отношения «есть», ошейник - объект сотрудничества. Делать ошейник абстрактным только для того, чтобы его могли носить собаки, не имеет смысла.
Я часто обнаруживаю, что абстрактные классы без абстрактных методов на самом деле выражают отношение «есть». В этих случаях я обычно считаю, что код можно лучше разложить на множители без использования наследования. Я также считаю, что абстрактные классы без абстрактных методов часто являются запахом кода и, по крайней мере, должны вызывать вопросы, возникающие при проверке кода.
Опять же, это полностью субъективно. Вполне могут быть ситуации, когда абстрактный класс без абстрактных методов имеет смысл, это полностью зависит от интерпретации и обоснования. Примите лучшее решение для того, над чем вы работаете.
На самом деле нет никакого смысла, если у абстрактного класса нет абстрактного метода. Абстрактный класс подобен отцу. У этого отца есть некоторые свойства и поведения, когда вы в детстве хотите быть ребенком отца, отец говорит ребенку (вам), что должен быть таким, это наш МОТО, и если вы не хотите этого делать, вы не мой ребенок.
WindowDecorator
иCoffeeDecorator
являютсяabstract
классами, но ни один из них не включаетabstract
метод.