黑马程序员技术交流社区

标题: 还是关于内部类和外部类相互调用的问题 [打印本页]

作者: renshu16    时间: 2014-5-2 09:34
标题: 还是关于内部类和外部类相互调用的问题
本帖最后由 renshu16 于 2014-5-3 10:48 编辑

class OutClass{                //定义外部类,包含私有成员变量和函数
        private int a = 2048;
        private void funcOut(){
                System.out.println("out function run print:" + a);
        }
        
        public  class InnerClass{                //定义内部类
                public void funcInner(){
                        System.out.println("inner function run");
                        System.out.println("a=" + a);        //内部类访问外部内的成员变量和函数()
                        funcOut();
                }
        }
        
        public static void main(String[] args){        
                OutClass o = new OutClass();
                //o.a = 0;                                        //问题1: 这俩句话报错,为什么?
                //o.funcOut();//                                          这不是OurClass类的对象o调用成员吗?
                OutClass.InnerClass in = o.new InnerClass();
                in.funcInner();
               
                //InnerClass.funcInner();                //问题2、 为什么不能直接调用内部函数?        
        }
        
}                                                //问题3、 本题需求:在外部类函数中创建内部类对象,调用内部类函数。 如何实现?

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

麻烦大神帮忙分析一下这段代码?
有三个问题:
//问题1:创建OurClass类的对象o,o.成员为什么报错?
//问题2: 为什么main函数中不能直接调用内部类的函数?
//问题3: 本题需求:在外部类函数中创建内部类对象,调用内部类函数。 如何实现?

作者: 付江涛    时间: 2014-5-2 09:56
复习static,问题迎刃而解
作者: lzhuas    时间: 2014-5-2 09:58
class OutClass{                //定义外部类,包含私有成员变量和函数
        private int a = 2048;
        private void funcOut(){
                System.out.println("out function run print:" + a);
        }
        
        public  class InnerClass{                //定义内部类
                public void funcInner(){
                        System.out.println("inner function run");
                        System.out.println("a=" + a);        //内部类访问外部内的成员变量和函数()
                        funcOut();
                }
        }
        
        public static void main(String[] args){        
                OutClass o = new OutClass();
                //o.a = 0;                                        //问题1: 这俩句话报错,为什么?首先,你要看清楚,a在你的Outclass类中是私有的,这就是原因
                //o.funcOut();//                                          这不是OurClass类的对象o调用成员吗?同上
                OutClass.InnerClass in = o.new InnerClass();
                in.funcInner();
               
                //InnerClass.funcInner();                //问题2、 为什么不能直接调用内部函数? 这种方式的调用,只能是调用静态方法,回去好好看看static那部分       
        }
        
}                                                //问题3、 本题需求:在外部类函数中创建内部类对象,调用内部类函数。 如何实现?这个是基础测试的题,你自己好好做吧,帮不了你

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

麻烦大神帮忙分析一下这段代码?
有三个问题:
//问题1:创建OurClass类的对象o,o.成员为什么报错?
//问题2: 为什么main函数中不能直接调用内部类的函数?
//问题3: 本题需求:在外部类函数中创建内部类对象,调用内部类函数。 如何实现?

作者: fei_xiong    时间: 2014-5-2 10:09
问题一:
没错,我也想不到哪里错了,所以复制到Eclipse上,结果真的没错
问题二:
主函数是静态的,所以要想直接调用内部类方法,也需要内部类是静态的,内部类是静态的,内部类的成员和方法也都要是静态的,而且调用时应该加上外部类名
问题三:
如果将内部类改成静态的话:   OutClass.InnerClass in = new OutClass().new InnerClass();
如果改成静态的话:OutClass.InnerClass.成员




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