Topic: 请教一个有关内部类的问题

  Print this page

1.请教一个有关内部类的问题 Copy to clipboard
Posted by: alexzlw
Posted on: 2006-04-19 12:27

class Outer{
int out_i = 100;
void test(){
   Inner in =new Inner();
   in.display();
     
  }
  
  public static void main(String [] args){
    
    Outer outer=new Outer();
    outer.test();
    }
  }
  class Inner{
    Outer outer;
    
  
  void display(){
  
  System.out.println("out_i is "+ outer.out_i);
  
  
}}
  
我想在outer的外部访问他的成员变量out_i , 这样写的话编译能通过,但执行有错误;但如果这样
class Outer{
int out_i = 100;
void test(){
   Inner in =new Inner(this);
   in.display();
     
  }
  
  public static void main(String [] args){
    
    Outer outer=new Outer();
    outer.test();
    }
  }
  class Inner{
    Outer outer;
    public Inner( Outer outer){
      this.outer=outer;
      }
  
  void display(){
  
  System.out.println("out_i is "+ outer.out_i);
  
  
}}
  

在Inner函数里加了个构造函数就解决问题了,为什么呢,不太明白 ( 还有一种解决方法是把Inner移到Outer的内部去访问变量out_i ,这个我知道了)

2.Re:请教一个有关内部类的问题 [Re: alexzlw] Copy to clipboard
Posted by: zcjl
Posted on: 2006-04-19 13:44

1.根据你的代码看,Inner根本就不是Outer的内部类,只是两个类定义在同一个源文件而已。

2.假设把Inner移到Outer内部去定义,你访问out_i的方式也是错误的:
System.out.println("out_i is "+ outer.out_i);

这里的outer虽然被声明为Inner的实例变量,却没有任何地方对它进行赋值,所以在上面的语句去访问它的属性,只会导致NullPointerException。不要被Outer类main方法中声明的
Outer outer=new Outer();
所误导,这个是方法内部的局部变量,在main方法外(哪怕在Outer内部)都是无法访问到的。

3.
还有一种解决方法是把Inner移到Outer的内部去访问变量out_i ,这个我知道了
也许你说的是如下这种正确使用Outer属性的方式:
public class Outer {
int out_i = 100;

void test() {
Inner in = new Inner();
in.display();
}

public static void main(String[] args) {
Outer outer = new Outer();
outer.test();
}

class Inner {
void display() {
System.out.println("out_i is " + out_i);
}
}
}

3.Re:请教一个有关内部类的问题 [Re: alexzlw] Copy to clipboard
Posted by: alexzlw
Posted on: 2006-04-19 15:23

1 恩,贴子名字没取对

2 主要是想问一下为什么按照第二种方法修改后就是对的了, 能解释一下吗,谢谢

4.Re:请教一个有关内部类的问题 [Re: alexzlw] Copy to clipboard
Posted by: zcjl
Posted on: 2006-04-19 17:59

class Outer {
int out_i = 100;

void test() {
Inner in = new Inner(this); //3.传递当前Outer实例到Inner类,对Inner.outer进行赋值
in.display();
}

public static void main(String[] args) {
Outer outer = new Outer();
outer.test();
}
}

class Inner {
Outer outer; //1.声明一个Outer对象的实例变量

public Inner(Outer outer) {
this.outer = outer; //2.对outer对象进行初始化
}

void display() {
System.out.println("out_i is " + outer.out_i);
}
}


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923