2012-01-04 48 views
7

Quiero llamar a un método de una clase abstracta en mi propia clase. La clase abstracta es:Cómo llamar al método de clase abstracta en java

public abstract class Call { 

    public Connection getEarliestConnection() { 
     Connection earliest = null; 

     ... 

     return earliest; 
    }  
} 

Quiero llamar el método anterior, y la clase de llamada es:

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"); 
     } 
    } 
} 

Siempre que intente ejecutar la clase anterior, se lanza una NullPointerException en la línea c = cal.getEarliestConnection() . ¿Alguien puede decirme cómo resolver este problema?

+0

No tengo suficiente código, me temo. Necesitamos ver si/cómo se instancia la llamada y dónde se invoca getCallFailedString. – Steven

+1

cómo y dónde se llama getCallFaildString() de la clase MyActivity? – Pratik

+1

Pratik tiene razón: el problema no es que la clase sea abstracta. El problema es que el valor de "cal" es nulo cuando lo está pasando. –

Respuesta

14

En primer lugar, Call una clase abstracta, por lo tanto, no puede crear una instancia directamente. Debe crear una subclase, digamos MyCall extends Call, que anula cualquier método abstracto en Llamar.

Obtener un NullPointerException significa que lo que sea que esté pasando como argumento a getCallFailedString() no se ha inicializado. Así que después de crear la subclase de llamada, usted tendría que crear una instancia y luego pasar esto a su método, así que algo como:

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

Dondequiera que está llamando getCallFailedString() requeriría entonces algo por encima de ella como:

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

Thx para tu respuesta. Lo intentaré. – shiv1229

1

Parece que el Call cal es nulo antes de que se pasa a la función getCallFailedString. Asegúrese de extender Call y crear una instancia de la clase extendida y pasarla a getCallFailedString.

-2

Asegúrese de que su objeto "cal" esté inicializado y no sea nulo. Además, no podrá crear instancias de un objeto Call (ya que es una clase destacada). En su lugar, declare Class Call como una interfaz e implemente su método getEarliestConnection() en su clase.

+0

Puede tener una variable instanciada de tipo 'Llamar' al asignarle un valor de una instancia de cualquiera de sus clases secundarias. –

+0

cal es solo una variable de referencia, no un objeto .. – Harinder

Cuestiones relacionadas