2012-01-04 12 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"); 
     } 
    } 
} 

、それはライン上でNullPointerExceptionがスローc = cal.getEarliestConnection() 。誰も私にこの問題を解決する方法を教えてもらえますか?

+0

コードが不十分です。恐れがあります。 Callがインスタンス化されているかどうか、getCallFailedStringがどこで呼び出されているかを確認する必要があります。 – Steven

+1

MyActivityクラスのgetCallFaildString()をどのように呼び出しますか? – Pratik

+1

Pratikが正しくあります。問題はクラスが抽象クラスではないということです。問題は、あなたがそれを渡しているときに "cal"の値がnullであるということです。 –

答えて

14

まず、Call抽象クラスであるため、直接インスタンス化することはできません。 Subclassを作成する必要があります。たとえば、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

Thxを使ってurの答えを出しています。私はそれを試してみます。 – shiv1229

1

Call calは、機能がgetCallFailedStringに渡される前にnullに見えます。 Callを拡張し、拡張クラスをインスタンス化してgetCallFailedStringに渡してください。

-2

オブジェクト "cal"が初期化され、nullでないことを確認してください。また、Callオブジェクトを(abstarctクラスとして)インスタンス化することもできません。その代わりに、クラスCallをインタフェースとして宣言し、クラス内にメソッドgetEarliestConnection()を実装します。

+0

'Call'型のインスタンス化された変数に、その子クラスのインスタンスの値を代入することができます。 –

+0

calはオブジェクトではなくrefrence変数です。 – Harinder

関連する問題