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


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

11 78

11 ответов:

конечно.

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

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

два отдельных понятия, хотя очевидно, что вы не можете иметь абстрактный метод в абстрактном классе. Вы даже можете иметь абстрактные классы с 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
Абстрактный метод-это метод, который не имеет тела, Если вы объявили хотя бы один метод в классе, класс должен быть объявлен как абстрактный его обязательным, но если вы объявили абстрактный класс его не обязательно объявлять абстрактный метод внутри класса.

нельзя создавать объекты абстрактного класса, что означает, что он не может быть создан.

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

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

да, вы можете сделать это.

объявление абстрактного класса означает, что класс не будет создан каким-либо другим классом.

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

пример:

public abstract class abs {

    protected int cx = 0, cy = 0;

    public void p() {
        System.out.print("hello");
    }
}

это будет работать точно.

да, можно определить абстрактный класс без абстрактных методов. Однако, если внутри нет метода, вам лучше пойти с интерфейсом

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

Так два дела

1) абстрактный класс с абстрактными методами.

эти типы классов, мы должны наследовать класс от этого абстрактного класса и должны переопределить абстрактные методы в нашем классе, пример: класс GenricServlet

2) абстрактный класс без абстрактных методов.

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

пожалуйста, проверьте исходный код HttpServlet

Да, вы можете. Иногда вам может быть задан этот вопрос, что это за цель? Ответ: Иногда мы должны ограничить класс от создания экземпляра самостоятельно. В этом случае мы хотим, чтобы пользователь расширил наш абстрактный класс и создал экземпляр дочернего класса

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

для меня наследование подразумевает отношение "есть-а". Представьте себе класс собак, который может быть расширен более специализированными подтипами (Эльзасский, Пудель и т. д.). В этом случае создание абстрактного класса dog может быть правильным, так как подтипы-это собаки. Теперь давайте представим, что собакам нужен ошейник. В этом случай наследования не имеет смысла: это нонсенс, чтобы иметь "есть-а" отношения между собаками и ошейниками. Это, безусловно, "имеет-а" отношения, воротник является сотрудничающим объектом. Создание абстрактного ошейника только для того, чтобы собаки могли его иметь, не имеет смысла.

Я часто нахожу, что абстрактные классы без абстрактных методов действительно выражают отношение "имеет-а". В этих случаях я обычно нахожу, что код может быть лучше учтены без использования наследования. Я также считаю, что абстрактные классы без абстрактного метода часто являются запахом кода и, по крайней мере, должны приводить к вопросам, возникающим в обзоре кода.

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