Может ли неабстрактный класс быть расширен (унаследован от) в Java? - PullRequest
6 голосов
/ 06 марта 2012

Нужно ли классу иметь абстрактное ключевое слово перед ним?Или нужно иметь нереализованные (абстрактные) методы?Можно ли расширить любой нормальный класс?

Ответы [ 7 ]

4 голосов
/ 06 марта 2012

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

4 голосов
/ 06 марта 2012

Можно ли расширить любой нормальный класс?

Да :) Если у него нет окончательного модификатора.

3 голосов
/ 06 марта 2012

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

AbstractClass abs = new ChildClass();
1 голос
/ 06 марта 2012

Да, но если класс помечен как окончательный, он не может быть расширен.

class Foo {
    //some code here
}

class Boo extends Foo {

}
1 голос
/ 06 марта 2012

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

1 голос
/ 06 марта 2012

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

DifferentString extends String

тогда

public String toString()
{
    return "Something different";
}

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

Справка:

http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html

0 голосов
/ 06 марта 2012

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

Вы можете расширить любой класс, если он не окончательный.

Редактировать: То, что я хотел сказать, что предпочтительнее размещать не реализованные методы в интерфейсах. Извините за плохую формулировку. Абстрактные классы также могут иметь нереализованные методы, хотя в итоге вы получите сложную и жесткую иерархию. ,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...