如何在java中访问这个匿名类方法?

时间:2014-07-03 09:11:01

标签: java

如何在Java中访问此匿名类方法,并在下面收到错误。 Java中匿名类的用途是什么?我们可以说匿名类的使用是java的优势之一吗?

class Test1
{
    public Test1()
    {
        System.out.println("Yes");
    }
}

class Test extends Test1
{  
    public static void main(String []args) {
        Test1 obj1= new Test1()
        {
            public void test1()
            {
                System.out.println("Yes A");
            }
        };
        obj1.test1(); // here i am getting error 
    }
}

5 个答案:

答案 0 :(得分:0)

你那里没有匿名课。

您收到错误,因为您尝试调用未在类test1()中声明的方法Test1以及obj1类的Test1实例。

关于匿名课程,请尝试阅读此tutorial

答案 1 :(得分:0)

您无法以这种方式访问​​它。 obj1的类型为Test1,此类没有test1方法。

答案 2 :(得分:0)

当我尝试编译您的程序时,我在第obj1.test1();行收到错误方法test1()未定义类型Test1

您可以通过在test1()类中创建Test1方法来解决此问题。

class Test1 {
  public Test1() {
     System.out.println("Yes");
  }
  public void test1() {

  }
}

答案 3 :(得分:0)

使用父类引用,您只能访问父类中声明的方法。
当你做的时候

Test1 obj1= new Test1(){
      public void test1(){
        System.out.println("Yes A");
      }
};
obj1.test1(); // here i am getting error 

您正在创建class extending Test1的匿名实例,该实例由父类型引用引用。

所以方法test1()实际上是一个属于扩展类的新方法,而不是Test1的重写方法,因此无法使用obj1调用它。

答案 4 :(得分:0)

您的代码是继承的示例,它不是匿名类的示例。 这里Test1 obj1 = new Test1()你正在创建Test1类的对象并试图在该对象上调用方法test1(),这意味着test1()方法应该出现在Test1类中。

你可以在这里看到匿名课

http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
How are Anonymous (inner) classes used in Java?