2016-04-13 686 views
2
interface Example{ 
    void methodExample(); 
} 
class Y{ 
    void do(Example x) { } 
} 

class X{ 
    void methodX() { 
    Y y = new Y(); 
    y.do(new Example() { 
     public void methodExample() { 
     System.out.println("methodExample"); 
     } 
    }); 
    } 
} 

Bir ana sınıf oluşturmak ve methodExample numaralı telefonu aramak istiyorum. Bunu nasıl yaparım? Sınıfınızla yanaAnonim (iç) sınıflarda yöntem çağırma

+2

ama kayda değer: '' 'aynı zamanda bir anahtar kelime olduğu için do''', geçerli bir tanımlayıcı değil. –

cevap

3

Example arabirimini uygular ve void methodExample() o arabirimde mevcut olduğu için, yapmanız gereken tek şey kendi arayüzü ile nesneyi referans ve bunun yöntemini çağırmak için geçerli:

class Y{ 
    public void doIt(Example x) { 
     x.methodExample(); 
    } 
} 

yukarıdaki eserler tüm anonim uygulamalar dahil olmak üzere, tüm sınıfların nesnelerinin Example uygulanması, methodExample() uygulamak için derleme zamanında bilinir. Sonra sınıfın Y erişimi yoksa

1

, yapmanın tek yolu Anonim iç sınıf kullanarak, ilk doIt() kendisini geçersiz kılmak için ve daha sonra, geçersiz kılınan yöntemi çağırmak, örneğin:

class X { 
    void methodX() { 
     Y y = new Y() { 
      @Override 
      void doIt(Example x) { 
       x.methodExample(); 
      } 
     }; 
     y.doIt(new Example() { 
      public void methodExample() { 
       System.out.println("methodExample"); 
      } 
     }); 
    } 
} 

için Bu çağrı, sadece yapabilirsiniz:

İlgisiz
public static void main(String[] args) throws Exception { 
    X x = new X(); 
    x.methodX(); 
}