2012-01-04 17 views
7

Chcę nazwać metodę klasy abstrakcyjnej w mojej własnej klasie. Abstrakcyjna klasa:Jak wywołać metodę klasy abstrakcyjnej w java

public abstract class Call { 

    public Connection getEarliestConnection() { 
     Connection earliest = null; 

     ... 

     return earliest; 
    }  
} 

chcę zadzwonić powyższej metody, a klasa powołaniem jest:

public class MyActivity extends Activity { 

    Connection c = new Connection(); 

    private void getCallFailedString(Call cal) 
    { 
     c = cal.getEarliestConnection(); 

     if (c == null) { 
      System.out.println("** no connection**"); 
     } else { 
      System.out.println("** connection"); 
     } 
    } 
} 

Ilekroć próbuję uruchomić powyższą klasę, to rzuca NullPointerException na linii c = cal.getEarliestConnection() . Czy ktoś może mi powiedzieć, jak rozwiązać ten problem?

+0

Za mało kodu obawiam się. Musimy sprawdzić, czy/jak wywoływana jest instancja i gdzie wywoływana jest metoda getCallFailedString. – Steven

+1

jak i gdzie wywołujesz getCallFaildString() z klasy MyActivity? – Pratik

+1

Pratik ma rację: problemem nie jest to, że klasa jest abstrakcyjna. Problem polega na tym, że wartość "cal" jest zerowa, gdy przekazujesz ją. –

Odpowiedz

14

Po pierwsze, Call Klasa abstrakcyjna, dlatego nie można jej bezpośrednio utworzyć. Musisz utworzyć podklasę, na przykład MyCall extends Call, która zastępuje wszelkie abstrakcyjne metody w wywołaniu.

Uzyskiwanie NullPointerException oznacza, że ​​cokolwiek przekazujesz jako argument do getCallFailedString() nie zostało zainicjalizowane. Więc po utworzeniu podklasy Call, trzeba by instancję, a następnie przekazać to do swojej metody, więc coś takiego:

class MyCall extends Call 
{ 
    //override any abstract methods here... 
} 

Gdziekolwiek dzwonisz getCallFailedString() będzie wtedy wymagać czegoś ponad to lubią:

Call cal = new MyCall(); 
Activity activity = new MyActivity(); 
activity.getCallFailedString(cal); 
+0

Thx na odpowiedź ur. Spróbuję tego. – shiv1229

1

Wygląda na to, że Call cal ma wartość null przed przekazaniem do funkcji getCallFailedString. Upewnij się, że rozszerzasz Call i tworzysz instancję klasy rozszerzonej i przekazujesz ją do getCallFailedString.

-2

Upewnij się, że obiekt "cal" jest zainicjowany i nie jest pusty. Ponadto nie będzie możliwe utworzenie instancji obiektu Call (jako klasy abstarct). Zamiast tego deklaruj wywołanie klasy jako interfejs i implementuj jego metodę getEarliestConnection() w klasie.

+0

Można utworzyć instancjonowaną zmienną typu "Call", przypisując jej wartość instancji dowolnej z jej klas potomnych. –

+0

cal to tylko zmienna refrence, a nie obiekt .. – Harinder

Powiązane problemy