A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

有个问题是如果一个类里面给定义一个包含私有成员变量和函数,
在这个类里面定义一个内部类,在内部类函数中去访问外部成员变量,并调用外部函数。
然后再去在外部类函数中创建内部类对象,调用内部类函数。感觉有点晕,希望
有高手能给用个完整的程序做个演示,谢谢。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

9 个回复

倒序浏览
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
我也在看内部类,就是匿名内部类书写有点烦,你这个问题很简单,手机没法写代码
回复 使用道具 举报
  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. }
复制代码


这样应该挺详细了吧.....

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报

嗯 很好,谢谢
回复 使用道具 举报
宋超2356 发表于 2014-3-26 22:58
这样应该挺详细了吧.....

很详细,谢谢,
回复 使用道具 举报
lovefmylgs 来自手机 中级黑马 2014-5-1 16:43:55
7#
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: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. }
复制代码
回复 使用道具 举报

记住一点:内部类可以直接访问外部类中的成员,包括私有,是因为内部类中持有一个外部类的引用(外部类名.this)。而外部类要想访问内部类中的成员,必须建立内部类的对象。
回复 使用道具 举报
内部类 外部类 的问题一直困扰着我,先顶,回来再仔细研究~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马