Как вызвать метод абстрактного класса в Java - PullRequest
7 голосов
/ 04 января 2012

Я хочу вызвать метод абстрактного класса в своем собственном классе.Абстрактный класс:

public abstract class Call {

    public Connection getEarliestConnection() {
         Connection earliest = null;

         ...

         return earliest;
    }    
} 

Я хочу вызвать вышеуказанный метод, а вызывающий класс:

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

Всякий раз, когда я пытаюсь запустить вышеуказанный класс, он генерирует исключение NullPointerExceptionна линии c = cal.getEarliestConnection().Может кто-нибудь сказать мне, как решить эту проблему?

Ответы [ 3 ]

15 голосов
/ 04 января 2012

Во-первых, Call абстрактный класс, поэтому вы не можете создать его экземпляр напрямую. Вы должны создать подкласс, скажем, MyCall extends Call, который переопределяет любые абстрактные методы в Call.

Получение NullPointerException означает, что все, что вы передаете в качестве аргумента getCallFailedString(), не было инициализировано. Поэтому после создания подкласса Call вам нужно будет создать его экземпляр, а затем передать его в свой метод, например что-то вроде:

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

Везде, куда вы звоните getCallFailedString(), потребуется что-то выше этого, например:

Call cal = new MyCall();
Activity activity = new MyActivity();
activity.getCallFailedString(cal);
1 голос
/ 04 января 2012

Похоже, что Call cal является нулевым, прежде чем оно будет передано в функцию getCallFailedString.Убедитесь, что вы расширяете Call, создаете экземпляр расширенного класса и передаете его в getCallFailedString.

0 голосов
/ 04 января 2012

Убедитесь, что ваш объект "cal" инициализирован и не равен нулю.Кроме того, вы не сможете создать экземпляр объекта Call (как его класса abstarct).Вместо этого объявите класс Call как интерфейс и реализуйте его метод getEarliestConnection () в вашем классе.

...