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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黑马-幻灭 于 2014-4-15 11:17 编辑

定义一个包含私有成员变量和函数的类,再定义一个内部类,
      在内部类函数中访问外部成员变量,并调用外部函数。
      在外部类函数中创建内部类对象,调用内部类函数。

class body
{
         private int x=9;
                 class xinzang     //定义一个内部类
                 {
                         void show()
                         {
                                 System.out.println(x);   //访问外部成员变量省略了外部类的一个持有(body.this.x)
                                 
                         }
                 }
         void method()
         {                 
                 xinzang xz=new xinzang();  //创建内部类对象调用内部类函数
                 xz.show();
                 System.out.println("Play");
         }
}

class Test7
{
         public static void main(String args[])
         {
                 body b=new body();
                 b.method();
         }
}





评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

15 个回复

倒序浏览
直接把内部类看作外部类的成员属性或者方法,直接调用外部类方法名不就行了
method() 或者 body.this.method()
回复 使用道具 举报
内部类可直接调用外部类的非静态成员和方法,因为内部类相当于类中的一个成员,是随着类的对象而存在的!静态内部类也就是在内部类前用static修饰,那么它只能调用外部类中的静态成员,创建对象的时候直接new Outer.Inner(),就可以了。。一定要注意的就是如果内部类没有被static修饰,千万不要调用外部类的静态成员,否则一定报异常

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
兄弟,说白了,这就是一个死循环,内部类跟外部函数玩上了,外部函数里要创建内部类运行里面的方法,但内部类中要调用外部函数,一运行,就不断的在外部函数跟内部类中切。你认真思考一下,看对不对
回复 使用道具 举报
内部类和外部类 应该不能相互之间同时调用的吧  应为 内调外  外调内  确实会形成死循环 另外  外循环的变量方法如果是私有的  内部类应该无法调用吧  内部类的权限也要大于外部类的  要不然外部类也不无调用类的成员变量和方法
回复 使用道具 举报
你又没写在内部类构造函数里,哪儿来的循环,怎么循环的起来?
回复 使用道具 举报
lzhuas 发表于 2014-4-15 11:23
兄弟,说白了,这就是一个死循环,内部类跟外部函数玩上了,外部函数里要创建内部类运行里面的方法,但内部 ...

谢了 兄弟!
回复 使用道具 举报
lzhuas 中级黑马 2014-4-16 09:24:49
8#
ithmC4 发表于 2014-4-15 12:08
你又没写在内部类构造函数里,哪儿来的循环,怎么循环的起来?

你仔细看看他的要求,他代码上没写,但我按他要求改了改就是死循环
回复 使用道具 举报
package com.itheima;

class Test6 {// 定义一个外部类
        private int a = 10;// 定义一个私有的成员变量
    public void outFunction(){//定义一个外部类方法
            System.out.println("outFunction run!");
    }
        public void function() {// 定义一个函数

                Inner in = new Inner();// 创建内部类对象
                in.method();// 调用内部类的method方法
        }

        class Inner {// 定义一个内部类
                public void method() {// 定义一个方法
                        System.out.println("innerFunction run!");
                        System.out.println(a);// 打印外部类中的成员变量a,省略了Test6.this.a
                        outFunction();// 调用外部函数
                }
        }
        public static void main(String[] args) {
                Test6 out = new Test6();
                out.function();

        }
       
}
回复 使用道具 举报 0 1
在内部类中调用外部类的另一个方法就不会构成死循环了,也满足了需求
回复 使用道具 举报
我刚刚试了一下楼主的代码,没有陷入死循环啊
回复 使用道具 举报
本帖最后由 heisedelangzi 于 2015-6-3 09:42 编辑

发错楼了
回复 使用道具 举报
我自己写的入学测试题目
  1. package com.itheima;

  2. /**
  3. * 5.定义一个包含私有成员变量和函数的类,再定义一个内部类,在内部类函数中访问外部成员变量,
  4. * 并调用外部函数。在外部类函数中创建内部类对象,调用内部类函数。
  5. *
  6. * @author zhulang
  7. *
  8. */
  9. public class Text5
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                 Person per = new Person();
  14.                 per.Show();
  15.         }
  16. }

  17. // 定义一个类
  18. class Person
  19. {
  20.         // 1.包含私有成员变量
  21.         private String name = "朱浪";
  22.         private int age = 18;

  23.         // 2.私有成员的函数

  24.         private void getNameAndAge()
  25.         {
  26.                 System.out.println("我叫" + name + "我永远" + age + "岁");
  27.         }

  28.                 // 5.外部类的构造函数创建内部类的对象,调用内部类函数
  29.         public void Show()
  30.         {
  31.                 Message mes = new Message();
  32.                 mes.getName();
  33.         }

  34.         /**
  35.          * 3.内部类
  36.          *
  37.          * @author tianshenjiaoao
  38.          *
  39.          */
  40.         class Message
  41.         {
  42.                 private void getName()
  43.                 {
  44.                         // 4。内部类函数访问内部成员变量+内部类调用外部函数
  45.                         System.out.println("内部类函数访问内部成员变量。得到名字叫" + name);
  46.                         System.out.println("内部类调用外部函数");
  47.                         getNameAndAge();
  48.                 }
  49.         }
  50. }
复制代码



回复 使用道具 举报
感谢大家的集思广益.对我很有启发谢谢大家
回复 使用道具 举报
zeizeizeiaaa 发表于 2015-3-13 17:00
在内部类中调用外部类的另一个方法就不会构成死循环了,也满足了需求

正解,没说一定要调用哪一个函数,出这个题目肯定是不要让你写出死循环
回复 使用道具 举报
public class Text {

            //定义私有变量
                private int age = 10;
                //定义私有方法
                private void show() {
                        System.out.println("我是外部类私有方法");
                }
                //创建内部类并调用外部类私有成员和方法
                class Inner {
                        public void show2() {
                                System.out.println(age);
                                show();
                        }
                }
        
                public void method() {
                        // 创建内部类对象
                        Inner i = new Inner();
                        i.show2();
                }

                /**
                 * java程序运行入口 jvm自动加载main方法
                 */
                public static void main(String[] args) {
                        //调用内部类对象
                        Text t = new Text();
                        t.method();
        
                }

}
这是我写的你可以看看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马