2012-01-04 10 views
7

내 자신의 클래스에서 추상 클래스의 메서드를 호출하려고합니다.Java에서 추상 클래스 메서드를 호출하는 방법

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

내가 위의 클래스를 실행하려고 할 때마다, 그것은 라인 c = cal.getEarliestConnection()에 NullPointerException이 발생합니다 . 아무도이 문제를 해결하는 방법을 말해 줄래?

+0

코드가 충분하지 않아 걱정됩니다. Call이 인스턴스화 된 방법과 getCallFailedString이 호출되는 위치를 확인해야합니다. – Steven

+1

MyActivity 클래스의 getCallFaildString()을 호출하는 방법과 위치는 무엇입니까? – Pratik

+1

Pratik이 맞습니다. 문제는 클래스가 추상 클래스가 아니라는 것입니다. 문제는 그것을 전달할 때 "cal"의 값이 null이라는 것입니다. –

답변

14

첫째, Call 추상 클래스이므로 직접 인스턴스화 할 수 없습니다. 예를 들어 MyCall extends Call이라는 하위 클래스를 만들어 Call의 모든 추상 메서드를 재정의해야합니다.

받기 NullPointerException을 얻는 것은 getCallFailedString()에 대한 인수로 전달하는 것이 초기화되지 않았 음을 의미합니다. 당신이 좋아하는 이상으로 무언가를 필요로 getCallFailedString()를 호출 어디

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

: 당신이 전화의 하위 클래스를 만들 그래서 후, 당신은 그것을 인스턴스화 다음 방법이 통과해야 할 것이다, 그래서 뭔가 같은

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

UR 대답을 위해 Thx. 시도해 볼게. – shiv1229

1

Call cal이 (가) getCallFailedString (으)로 전달되기 전에 null 인 것 같습니다. Call을 확장하고 확장 클래스를 인스턴스화하여 getCallFailedString에 전달하십시오.

-2

"cal"개체가 초기화되고 null이 아닌지 확인하십시오. 또한 Call 객체 (abstarct 클래스)를 인스턴스화 할 수 없습니다. 대신 클래스 Call을 인터페이스로 선언하고 클래스에 getEarliestConnection() 메서드를 구현하십시오.

+0

자식 클래스의 인스턴스 값을 할당하여'Call' 유형의 인스턴스화 된 변수를 가질 수 있습니다. –

+0

cal은 객체가 아닌 refrence 변수입니다. – Harinder

관련 문제