2010-10-03 11 views
18

Czy można zdefiniować prywatną klasę abstrakcji w Javie? W jaki sposób programista Java napisałby konstrukcję, jak poniżej?Java: jak zaimplementować prywatne abstrakcyjne metody?

public abstract class MyCommand { 
    public void execute() 
    { 
     if (areRequirementsFulfilled()) 
     { 
      executeInternal(); 
     } 
    } 
    private abstract void executeInternal(); 
    private abstract boolean areRequirementsFulfilled(); 
} 

Odpowiedz

40

Nie można mieć metod private abstract w Javie.

Gdy metoda jest private, podklasy nie mają do niej dostępu, dlatego nie mogą jej przesłonić.

Jeśli chcesz uzyskać podobne zachowanie, będziesz potrzebować metody protected abstract.

Jest to błąd kompilacji, jeśli deklaracja metody, która zawiera słowa kluczowego abstract zawiera także dowolny z kluczowych private, static, final, native, strictfp lub synchronized.

I

Byłoby niemożliwe podklasą zaimplementować metodę private abstract, ponieważ private metody nie są dziedziczone przez podklasy; w związku z tym takiej metody nigdy nie można użyć.


Zasoby:

+3

Ani w C# ...... –

+2

W rzeczywistości, prywatne metody * mogą * być dostępne przez podklasy - o ile te podklasy są ujęte w super klasa. – gustafc

+0

@gustafc, nawet jeśli twoja klasa jest zawarta w super klasie, masz dwie możliwości, albo ta klasa jest statyczna, wtedy abstrakcyjna metoda nie jest dostępna (nie ze statycznego środowiska), albo klasa nie jest statyczna ale aby mieć jedną instancję podklasy potrzebujesz instancji z super klasy, która nie jest dostępna (ponieważ jest abstrakcyjna) ani nie można jej rozszerzyć z zewnątrz. –

6

To byłoby protected zamiast private. Oznacza to, że tylko klasy rozszerzające MyCommand mają dostęp do tych dwóch metod. (Podobnie jak wszystkie klasy z tego samego pakietu, ale to jest drobna kwestia).

Powiązane problemy