黑马程序员技术交流社区

标题: 关于成员变量和内部类的问题,请教高手, [打印本页]

作者: 探花    时间: 2014-3-26 22:02
标题: 关于成员变量和内部类的问题,请教高手,
有个问题是如果一个类里面给定义一个包含私有成员变量和函数,
在这个类里面定义一个内部类,在内部类函数中去访问外部成员变量,并调用外部函数。
然后再去在外部类函数中创建内部类对象,调用内部类函数。感觉有点晕,希望
有高手能给用个完整的程序做个演示,谢谢。


作者: itpower    时间: 2014-3-26 22:19
  1. public class Test5 {
  2.     public static void main(String[] args) {
  3.        
  4.    }
  5. }
  6. class Outside{
  7.           private Integer integer = 88;
  8.           private void OoutMethod(){
  9.                     System.out.println("外部类函数被调用咯    ");
  10.                     Inside inside = new Inside();
  11.                     inside.InMethod();
  12.           }
  13.           class Inside{
  14.                   private void InMethod(){
  15.                          Outside.this.OoutMethod();
  16.                          System.out.println("外部类的私有成员integer="+Outside.this.integer);
  17.                   }
  18.           }
  19. }
复制代码

作者: 嘿~~    时间: 2014-3-26 22:22
我也在看内部类,就是匿名内部类书写有点烦,你这个问题很简单,手机没法写代码
作者: 宋超2356    时间: 2014-3-26 22:58
  1. class Test {
  2.         public static void main(String [] args) {
  3.                 Out out = new Out(); //创建外部类对象,有了外部类对象才可能有内部类
  4.                 Out.In in = out.new In();  //创建内部类对象,因为是内部类,所以不可以直接创建,要通过外部类

  5.         }
  6. }

  7. class Out {
  8.         private String str = "外部成员变量";
  9.         protected void out() {
  10.                 System.out.println("外部函数被访问了");
  11.         }


  12.         class In  { //内部类,他可以直接访问外部类的成员变量,方法等..
  13.                 String str = " 内部类变量";
  14.                 In(){
  15.                         Out.this.out();     //访问外部类 成员方法
  16.                         String str =" 方法中变量";
  17.                         System.out.println(Out.this.str+"   "+this.str+"   "+str);     //外部类.this.名称  访问外部变量,内部类.this.名称 访问内部变量,变量名   访问方法中变量
  18.                 }

  19.         }
  20. }
复制代码


这样应该挺详细了吧.....
作者: 探花    时间: 2014-3-27 22:19
itpower 发表于 2014-3-26 22:19

嗯 很好,谢谢
作者: 探花    时间: 2014-3-27 22:20
宋超2356 发表于 2014-3-26 22:58
这样应该挺详细了吧.....

很详细,谢谢,
作者: lovefmylgs    时间: 2014-5-1 16:43
public class Test5 {     public static void main(String[] args) {             } } class Outside{           private Integer integer = 88;           private void OoutMethod(){                     System.out.println("外部类函数被调用咯    ");                     Inside inside = new Inside();                     inside.InMethod();           }           class Inside{                   private void InMethod(){                          Outside.this.OoutMethod();                          System.out.println("外部类的私有成员integer="+Outside.this.integer);                   }           } }
作者: 大恶魔先森~    时间: 2014-5-1 18:26
本帖最后由 大恶魔先森~ 于 2014-5-1 18:35 编辑
  1. class Outer//定义外部类
  2. {
  3.     private int x=0;//私有成员变量
  4.     private void print()//私有函数
  5.     {
  6.         Inner in=new Inner();//定义内部类的对象
  7.         in.show();//调用内部类的方法
  8.         private void print()
  9.        {
  10.           System.out.println("Hello!");
  11.        }
  12.     class Inner//定义内部类
  13.     {
  14.         System.out.println(Outer.this.x);//访问外部类的x
  15.         Outer.this.print();//内部类中调用外部类函数
  16.         public void show()
  17.         {
  18.             System.out.println("Show!");
  19.             
  20.         }
  21.         
  22.     }
  23. public static void main()
  24. {
  25.       new Outer();
  26. }
  27.    
  28. }
复制代码

作者: 大恶魔先森~    时间: 2014-5-1 18:36
大恶魔先森~ 发表于 2014-5-1 18:26

记住一点:内部类可以直接访问外部类中的成员,包括私有,是因为内部类中持有一个外部类的引用(外部类名.this)。而外部类要想访问内部类中的成员,必须建立内部类的对象。
作者: renshu16    时间: 2014-5-1 19:47
内部类 外部类 的问题一直困扰着我,先顶,回来再仔细研究~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2