2012-01-04 7 views
7

Tôi muốn gọi một phương thức của lớp trừu tượng trong lớp của riêng tôi. Lớp trừu tượng là:Cách gọi phương thức lớp trừu tượng trong java

public abstract class Call { 

    public Connection getEarliestConnection() { 
     Connection earliest = null; 

     ... 

     return earliest; 
    }  
} 

tôi muốn gọi các phương pháp trên, và lớp gọi là:

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

Bất cứ khi nào tôi cố gắng để chạy các lớp trên, nó ném một NullPointerException trên dòng c = cal.getEarliestConnection() . Bất cứ ai có thể cho tôi biết làm thế nào để giải quyết vấn đề này?

+0

Không đủ mã tôi sợ. Chúng ta cần xem liệu Call có được instantiated hay không và getCallFailedString được gọi ở đâu. – Steven

+1

cách thức và nơi bạn gọi getCallFaildString() của lớp MyActivity? – Pratik

+1

Pratik đúng: vấn đề không phải là lớp trừu tượng. Vấn đề là giá trị của "cal" là null khi bạn đang chuyển nó vào. –

Trả lời

14

Thứ nhất, Call một lớp trừu tượng, do đó bạn không thể khởi tạo trực tiếp lớp đó. Bạn phải tạo một lớp con, giả sử MyCall extends Call ghi đè bất kỳ phương thức trừu tượng nào trong Gọi.

Nhận NullPointerException có nghĩa là bất cứ điều gì bạn đang chuyển vào làm đối số cho getCallFailedString() chưa được khởi tạo. Vì vậy, sau khi bạn tạo lớp con của bạn của Call, bạn phải nhanh chóng nó và sau đó chuyển thông tin này trong phương pháp của bạn, vì vậy cái gì đó như:

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

Bất cứ nơi nào bạn đang gọi getCallFailedString() sau đó sẽ đòi hỏi một cái gì đó ở trên nó thích:

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

Thx cho câu trả lời ur. Tôi sẽ thử nó. – shiv1229

1

Có vẻ như Call cal là null trước khi được chuyển vào hàm getCallFailedString. Đảm bảo bạn mở rộng Call và khởi tạo lớp mở rộng và chuyển nó vào getCallFailedString.

-2

Đảm bảo đối tượng "cal" của bạn được khởi tạo và không rỗng. Ngoài ra, bạn sẽ không thể khởi tạo một đối tượng Call (vì nó là một lớp abstarct). Thay vào đó, khai báo lớp Call là một giao diện và thực hiện phương thức getEarliestConnection() của nó, trong lớp của bạn.

+0

Bạn có thể có một biến tức thời kiểu 'Gọi' bằng cách gán cho nó một giá trị của một cá thể của bất kỳ lớp con nào của nó. –

+0

cal chỉ là một biến refrence không phải là một đối tượng .. – Harinder