2014-12-10 2 views
0

У меня есть два вложенных класса внутри класса с внешним классом, расширяющим другой класс. Структура что-то вроде этого.Использование метода одного класса из другого класса с использованием этого ключевого слова в конструкторе

public class EXTENSION_CLASS 
    { 
     public int Get_Value() 
     { 
      return(100); 
     } 
    } 

    public class OUTER extends EXTENSION_CLASS 
    { 
     public static class NESTED1 
     { 
      public void Method1() 
      { 
       int value=0; 
       value=Get_Value(); 
       System.out.println("Method1: "+value); 
      } 
     } 
     public static class NESTED2 
     { 
      NESTED1 Nested1_Instance=new NESTED1(); 
      public void Method2() 
      { 
       Nested1_Instance.Method1(); 
      } 
     } 
     public void run() 
     { 
      NESTED2 Nested2_Instance=new NESTED2(); 
      Nested2_Instance.Method2(); 
     } 
     public static void main (String[] args) 
     { 
      OUTER New_Class=new OUTER(); 
      New_Class.run(); 
     } 
    } 

Ожидается выход: «Способ 1: 100». Но я получаю вывод: «OUTER.java:16: ошибка: нестатический метод Get_Value() не может ссылаться на значение статического контекста = Get_Value();». Как я могу заставить это работать?

Cheers!

Rajesh.

+0

Можете ли вы сказать, с какими проблемами вы столкнулись? Я пробовал с той же программой, и это сработало. – gprathour

+0

Это работает для меня, что такое проблема с ур? –

+0

Извините, ребята, я обновил программу, чтобы представить настоящую проблему. Спасибо за ваши ответы! –

ответ

1

Один из подходов состоит в том, чтобы иметь экземпляр NESTED1 в NESTED2. Например:

private static class NESTED2 
    { 
    private NESTED1 nested1; 
    public NESTED2 (NESTED1 nested1) { 
     this.nested1 = nested1; 
    } 
    public void Method2() 
    { 
     nested1.Method1(); 
    } 
    } 
+0

Спасибо Крису за ваш быстрый ответ! –

1
private static class NESTED2 
{ 
    public void Method2(NESTED1 nested1Instance) 
    { 
    nested1Instance.Method1(); 
    } 
} 

Это должно сделать это с классовой структурой. Вместо этого с такой модификацией ...

private static class NESTED1 
{ 
    public *statc* void Method1() 
    { 
    ... 
    } 
} 
private static class NESTED2 
{ 
    public *static* void Method2() 
    { 
    NESTED1.Method1(); 
    } 
} 

... вы можете уйти без создания объектов.

Если вы сделаете методы статическими, вам не нужно создавать (создавать) объект класса, чтобы их сначала вызвать.

+0

Спасибо Эли за ваш ответ! –