2014-03-12 6 views
0

Я готов принять свой экзамен по программированию на Java 7 и задать вопрос:, когда абстрактный класс расширяет конкретный класс, унаследованные члены становятся абстрактными?

Когда абстрактный класс расширяет конкретный класс, наследуют ли члены от конкретного класса, затем становятся абстрактными в абстрактном классе?

Я не могу найти ясного ответа до сих пор в книге, которую изучаю; Кроме того, Google крутит меня по кругу, не говоря мне, что мне нужно знать.

Заранее спасибо

+1

Я бы предположил, что если вы изучаете экзамен на Java 7, у вас будет компилятор перед вами. Почему бы не попробовать и посмотреть? –

ответ

3

Нет, они не становятся abstract. Если это так, то код ниже не компилировался:

class Test { 
    public void hello() { 
     System.out.println("Hello"); 
    } 
} 

abstract class AbstractTest extends Test { } 

class ConcreteTest extends AbstractTest { 
    // Inherits the hello() method from AbstractTest, 
    // which in turn inherits it from Test. 
} 

Но он компилируется в порядке. Если бы метод hello() стал abstract, то ConcreteTest должен был обеспечить реализацию для этого.

Однако вы можете повторно объявить этот метод в методе AbstractTest как abstract, а затем класс ConcreteTest должен будет предоставить реализацию для этого. Так, в этом коде:

class Test { 
    public void hello() { 
     System.out.println("Hello"); 
    } 
} 
abstract class AbstractTest extends Test { 
    public abstract void hello(); 
} 
class ConcreteTest extends AbstractTest { 
} 

ConcreteTest не будет компилироваться.

+0

Спасибо за все детали - это действительно помогло. – eggshell

2

Нет унаследованное от конкретного класса не становится абстрактным, только если переопределить их и объявить абстрактные (элементы методы).

Смежные вопросы