2015-04-28 2 views
1

Я сделал внешний и внутренний класс. Оба этих класса имеют переменную int x. Как получить доступ к x класса Outer во внутреннем классе. this.x не работает.Как получить доступ к переменной внешнего класса с тем же именем?

class OuterClass { 
int x,y; 
private class InnerClass { 
    private void printSum(int x,int y) { 
     this.x=x; 
     this.y=y; 
    } 
    } 
} 
+3

OuterClass.this.x и OuterClass.this.y. OuterClass.this ссылается на внешний класс. –

ответ

4

Вы можете попробовать это:

private void printSum(int x,int y) { 
     OuterClass.this.x=x; 
     OuterClass.this.y=y; 
    } 
0

Другой способ сделать членов внешнего класса, как защищаемого

public class OuterClass { 

protected int x=10,y=20; 

private class InnerClass { 

    private void printSum(int x1,int y1) { 
     x=x1; 
     y=y1; 
    } 

    } 

} 
0

Использование OuterClass.this.x; OuterClass.this ссылается на родительский объект (от которого генерируется объект InnerClass).

Рассмотрим следующий осеняющее пример размещен в официальном руководстве Oracle:

public class ShadowTest { 

    public int x = 0; 

    class FirstLevel { 

     public int x = 1; 

     void methodInFirstLevel(int x) { 
      System.out.println("x = " + x); 
      System.out.println("this.x = " + this.x); 
      System.out.println("ShadowTest.this.x = " + ShadowTest.this.x); 
     } 
    } 

    public static void main(String... args) { 
     ShadowTest st = new ShadowTest(); 
     ShadowTest.FirstLevel fl = st.new FirstLevel(); 
     fl.methodInFirstLevel(23); 
    } 
} 

с выходом

x = 23 
this.x = 1 
ShadowTest.this.x = 0 

x = 23 относится к локальной переменной метода void methodInFirstLevel(), this.x = 1 относится к общественной сфере xFirstLevel внутренний класс и ShadowTest.this.x = 0 относится к общему полю x из ShadowTest внешний класс.

1

Если вы хотите сделать это, вы должны сначала создать экземпляр внешнего класса, то внутренний, как так:

/* package whatever; // don't place package name! */ 

import java.util.*; 
import java.lang.*; 
import java.io.*; 

/* Name of the class has to be "Main" only if the class is public. */ 
class Ideone 
{ 
    int x,y,sum; 

    public static void main (String[] args) throws java.lang.Exception 
    { 
     //Create outer object 
     Ideone ideOne = new Ideone(); 

     //instantiate inner object, and call method 
     Ideone.InnerClass ic = ideOne.new InnerClass(); 
     ic.printSum(5,4); 
    } 


    private class InnerClass { 
     private void printSum(int x,int y) { 
      //reference the outer object instance 
      Ideone.this.x=x; 
      Ideone.this.y=y; 
      Ideone.this.sum = x + y; 
      System.out.println(Ideone.this.sum); 
     } 
    } 
} 

Это было проверено здесь: http://ideone.com/e.js/DRIzSg

Output: 9 

 Смежные вопросы

  • Нет связанных вопросов^_^