有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

匿名类中的java限制

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

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

我们如何访问y()方法


共 (2) 个答案

  1. # 1 楼答案

    Can we define a method in anonymous class other than a method present in a super class?

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

    how can we access y() method??

    不幸的是,由于明显的原因,您无法在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();
    
  2. # 2 楼答案

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

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