Как я могу получить доступ к этому анонимному методу класса в Java? [Дубликат]

1

Как я могу получить доступ к этому методу анонимного класса в 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 
    }
}
  • 0
    Опубликуйте полученную ошибку, это поможет решить проблему.
  • 0
    в чем ошибка?
Показать ещё 1 комментарий
Теги:

5 ответов

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.

0

Когда я пытаюсь скомпилировать вашу программу, я получаю ошибку в строке obj1.test1(); поскольку метод test1() не определен для типа Test1.

Это можно решить, создав метод test1() в классе Test1.

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

  }
}
0

Вы не можете получить к нему доступ таким образом. obj1 имеет тип Test1 и этот класс не имеет метода test1.

  • 0
    Конечно, но вы не можете получить к нему доступ через тип суперкласса. В любом случае, я пометил его как дубликат: stackoverflow.com/questions/18656107/…
0

ваш код является примером наследования, это не пример анонимного класса. Здесь Test1 obj1 = new Test1() вы создаете объект класса Test1 и пытаетесь вызвать метод test1() на этом объекте, так как метод test1() должен присутствовать в классе Test1.

И анонимный класс, который вы можете увидеть здесь

http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html
Как анонимные (внутренние) классы используются в Java?

0

У вас нет анонимного класса.

У вас возникла ошибка, потому что вы пытаетесь вызвать метод test1() не объявлен в классе Test1 и ваш экземпляр объекта obj1 класса Test1.

Об анонимных классах читайте этот учебник.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню