黑马程序员技术交流社区

标题: 内部类函数中怎样调用外部函数??求各位大神帮忙!! [打印本页]

作者: 黑马-幻灭    时间: 2014-4-15 10:44
标题: 内部类函数中怎样调用外部函数??求各位大神帮忙!!
本帖最后由 黑马-幻灭 于 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();
         }
}






作者: routopia    时间: 2014-4-15 11:03
直接把内部类看作外部类的成员属性或者方法,直接调用外部类方法名不就行了
method() 或者 body.this.method()
作者: 曹冬明    时间: 2014-4-15 11:23
内部类可直接调用外部类的非静态成员和方法,因为内部类相当于类中的一个成员,是随着类的对象而存在的!静态内部类也就是在内部类前用static修饰,那么它只能调用外部类中的静态成员,创建对象的时候直接new Outer.Inner(),就可以了。。一定要注意的就是如果内部类没有被static修饰,千万不要调用外部类的静态成员,否则一定报异常
作者: lzhuas    时间: 2014-4-15 11:23
兄弟,说白了,这就是一个死循环,内部类跟外部函数玩上了,外部函数里要创建内部类运行里面的方法,但内部类中要调用外部函数,一运行,就不断的在外部函数跟内部类中切。你认真思考一下,看对不对
作者: 米大米    时间: 2014-4-15 11:48
内部类和外部类 应该不能相互之间同时调用的吧  应为 内调外  外调内  确实会形成死循环 另外  外循环的变量方法如果是私有的  内部类应该无法调用吧  内部类的权限也要大于外部类的  要不然外部类也不无调用类的成员变量和方法
作者: ithmC4    时间: 2014-4-15 12:08
你又没写在内部类构造函数里,哪儿来的循环,怎么循环的起来?
作者: 黑马-幻灭    时间: 2014-4-15 23:07
lzhuas 发表于 2014-4-15 11:23
兄弟,说白了,这就是一个死循环,内部类跟外部函数玩上了,外部函数里要创建内部类运行里面的方法,但内部 ...

谢了 兄弟!
作者: lzhuas    时间: 2014-4-16 09:24
ithmC4 发表于 2014-4-15 12:08
你又没写在内部类构造函数里,哪儿来的循环,怎么循环的起来?

你仔细看看他的要求,他代码上没写,但我按他要求改了改就是死循环
作者: zeizeizeiaaa    时间: 2015-3-13 16:59
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();

        }
       
}

作者: zeizeizeiaaa    时间: 2015-3-13 17:00
在内部类中调用外部类的另一个方法就不会构成死循环了,也满足了需求
作者: 天涯回望    时间: 2015-5-30 16:55
我刚刚试了一下楼主的代码,没有陷入死循环啊
作者: heisedelangzi    时间: 2015-6-3 09:41
本帖最后由 heisedelangzi 于 2015-6-3 09:42 编辑

发错楼了
作者: 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. }
复制代码




作者: 杨怀伟    时间: 2015-8-20 00:49
感谢大家的集思广益.对我很有启发谢谢大家
作者: 邬jerry    时间: 2015-10-22 20:34
zeizeizeiaaa 发表于 2015-3-13 17:00
在内部类中调用外部类的另一个方法就不会构成死循环了,也满足了需求

正解,没说一定要调用哪一个函数,出这个题目肯定是不要让你写出死循环
作者: 崔判官    时间: 2015-11-5 16:33
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();
        
                }

}
这是我写的你可以看看




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