2015-06-01 2 views
0

Мне сказали, что: класс может расширить конкретный суперкласс и переопределить реализованный метод, чтобы сделать его абстрактным.Возможно ли сделать абстракцию суперкласса?

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

Это правильно? Если да, то имеет смысл сделать суперкласс или метод в суперклассе стать абстрактным?

ответ

0

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

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

Подробнее об абстрактных классах here.

0

Независимо от того, выполняете ли вы свой абстрактный класс, если он содержит абстрактные методы, не является выбором, он является обязательным. У вас не может быть не абстрактный класс, который имеет абстрактные методы.

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

0

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

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

Это правильно?

Я думаю, это неправильно.

Возьмите, например, следующий код.

public class Father { 
    public void print() { 
     System.out.println("Father"); 
    } 
} 

public abstract class Son extends Father { 
    @Override 
    public abstract void print(); /* no need to abstract the superclass */ 

    // and other abstract or concrete methods 
} 

public class Grandson extends Son { 
    @Override 
    public void print() { 
     System.out.println("Grandson"); 
    } 
} 
Смежные вопросы