繁体   English   中英

匿名类方法访问

[英]Anonymous class method access

是否有任何可能的方法来访问anonySubClassMethod方法? 如果没有为什么Java编译器允许创建此方法?

abstract interface AnonyIfc {
   public abstract void methodIfc ();
}

public class AnonyImplementation {
   public static void main (String... a) {
      AnonyIfc obj = new AnonyIfc(){
         public void methodIfc() {
            System.out.println("methodIfc");
         }
         public void anonySubClassMethod() {
            System.out.println("anonySubClassMethod");
         }
      };
      //obj.anonySubClassMethod()  won't be visible since refering sub class
      //                           method with super class reference
   }
 }

更新
来自Francis Upton我明白anonySubClassMethod可以在匿名类中使用。 那么我可以期望java编译器将访问说明符限制为anonySubClassMethod的私有吗? 希望这个公共说明人也有理由。 只是好奇。

正如其他人所指出的那样,可以从类中调用该方法。 从课外调用它的唯一方法(除了使用反射)将如下所示:

new Object() {
    void doSomething() {
        //code
    }
}.doSomething();

您可以使用反射来访问它,但是否则无法从匿名类之外的任何代码中获取它。 但是,这并不意味着你不能从类访问它。 methodIfc()可以调用它,这就是为什么编译器不能轻易地将它声明为死代码。

可以在匿名类中调用该方法。 此构造的更典型用法是您正在实现接口(例如,用于GUI侦听器)的情况,因此该方法将是已知的,因为它是调用者期望的接口的实现。

编译器没有将anonySubClassMethod的可见性限制为private的原因是可以通过反射访问此方法: obj.getClass().getMethod("anonySubClassMethod").invoke(obj)

如果您不想使用反射,则无法调用此方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM