2013-06-22 5 views
0

Можем ли мы иметь конкретный суперкласс, а затем абстрактный подкласс? Может кто-нибудь объяснить, как это работает?Как работает абстрактный подкласс в Java?

Спасибо

+5

Почему бы вам просто не попробовать? Я не понимаю, почему это невозможно. – Polygnome

+0

Вы можете создать класс и расширить его и назвать подкласс как абстрактный класс. Напишите в них оба оператора system.out.println. Определите, какой экземпляр класса вы можете создать, и проверьте, какой результат. Если у вас есть сомнения, не стесняйтесь спрашивать, и мы поможем вам –

+1

Мы можем, но не должны. –

ответ

3

Это уже происходит во всем мире, потому что все классы наследуют прямо или косвенно от Object. Так, например, AbstractCollection - абстрактный класс, который наследуется от конкретного класса Object.

В этом нет ничего особенного. Конкретные подклассы абстрактного класса по-прежнему должны реализовывать абстрактные методы.

+0

+1 все абстрактные классы наследуют от Object – Bohemian

2

У вас может быть это да. Единственное ограничение о классе существо реферата является то, что:

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

  2. Это не может быть создан

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

Автомобиля наследует абстрактный автомобиль наследует Ferrari

Тогда Ferrari получит фактические реализованные методы транспортного средства.

0

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

Abstract class AbstractClass extends ConcreteClass{ 
    public abstract void method(); 
} 

class ConcreteClass { 
    public void doSomething(){ 

    } 
} 

в AbstractClass вы не должны реализовать метод DoSomething, и в ConcreteClass, вы не должны реализовать метод(). Было бы лучше, если бы вы просто попробуйте сами, и я рекомендую вам прочитать эту книгу http://www.amazon.com/SCJP-Certified-Programmer-Java-310-065/dp/0071591060

Спасибо, Халила.

0

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

Пример использования для этого, если вы хотите, чтобы ваши Наследники к, например, переописать некоторые методы ... Скажи:

public abstract class MustHaveEqualsAndHashCode() 
{ 
    @Override 
    public abstract int hashCode(); 

    @Override 
    public abstract boolean equals(Object obj); 
} 

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