匿名类的限制

时间:2014-02-14 18:29:49

标签: java anonymous-class

我们可以在匿名类中定义一个方法而不是超类中存在的方法吗?如果是,它是如何可能的以及我们如何访问它 例如

abstract class a
{
  public void method()
  {
  }
}
class b
{
  public static void main(String arr[])
  {
    a x=new a()
    {
     public void y()
     {
     }
    };
  }
}

我们如何访问y()方法?

2 个答案:

答案 0 :(得分:2)

  

我们可以在匿名类中定义一个方法而不是超类中存在的方法吗?

是。事实上,你只是在你的例子中做到了。

  

我们如何访问y()方法??

不幸的是,由于显而易见的原因,您无法在x引用上访问该方法。编译器找不到y()方法声明类A。直接在匿名类实例创建表达式上访问该方法的唯一方法,如下所示:

new A() {
    public void y()
    {
    } 
}.y();

但这几乎没用。

或者你可以从另一个类A的方法中调用它,你可以在匿名内部类中覆盖它。

class A {
    public void demo() {        
    }
}

A obj = new A() {
        public void demo() {
            demo2();
        }

        public void demo2() {
            System.out.println("Hello");
        }
    };

    obj.demo();

答案 1 :(得分:0)

您可以定义此类方法,但只能从同一抽象类中的其他方法访问它:

abstract class a
{
  public void method()
  {
  }
}
class b
{
  public static void main(String arr[])
  {
    a x=new a()
    {
     public void y()
     {
     }
     public void method() {
        // call y()
        y();
    };
  }
}