2011-08-16 8 views
19

süper yöntemi çağırmak için. süperAranma değil Bar ile ilgilidir çünkü bu kod çalışmıyorJava: Ben <em>Spam</em> geçersiz kılan yöntem <em>istenmeyen</em> ve sınıf <em>Bar</em> ile temel sınıf <em>Foo</em> Kaç iç yerinde sınıfından

public class Foo { 
    public void spam() { 
     // ... 
    } 
} 

public class Bar extends Foo { 
    @Override 
    public void spam() { 
     objectWhichRequireCallback(new Callback { 
      @Override 
      public void onCallback() { 
       super.spam(); 
      } 
     }); 
    } 
} 

: Ben yerinde tanımlanan bazı geri arama nesnesinin yönteminde temel sınıf istenmeyen çağırmanız gerekir sınıf. Yerinde tanımlanmış nesneden süper yöntemi çağırmak mümkün mü?

+1

Bunu denediniz mi.Foo.super.span()? – SJuan76

cevap

28
public class Bar extends Foo { 
    @Override 
    public void spam() { 
     objectWhichRequireCallback(new Callback { 
      @Override 
      public void onCallback() { 
       Bar.super.spam(); 
      } 
     }); 
    } 
} 

DÜZENLEME: Üzgünüm. Yöntem isimlerinin aynı olduğunu anlamadım. Bar.super.spam();

Bar.this.spam(); derlenmektedir ancak aynı Spam diyoruz çünkü) (kendisini sonsuz yinelemeye neden olur:

+2

[StackOverflow] (http://stackoverflow.com/questions/7079600/java-how-to-call-super-method-from-inner-in-place-class) ;-) –

+1

Bunu denediğime emindim soru sormadan önce yaklaşım, ama Eclipse bana hata verdi. Görünüşe göre dikkatsiz davrandım. Şimdi tekrar denedim. İşe yarıyor! Teşekkürler! – Vlad

+0

@AlistairIsrael - Göze çarpan hatayı işaretlediğiniz için teşekkür ederiz. – Kal

3

Bunu deneyin Bar

public class Bar... 

    public void mySuperSpam(){ 
     super.spam(); 
    } 
+1

+1 "SuperSpam" ifadesi için – dlev

+0

Bu benimSuperDuperSpam olmalı? :) –

2

yılında, bunun için bir sarıcı işlevi oluşturabilirsiniz.

+2

Herkes iyi bir Stack Overflow'u sever. Demek istediğim, biz buradayız. –

İlgili konular