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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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: 本题需求:在外部类函数中创建内部类对象,调用内部类函数。 如何实现?

3 个回复

倒序浏览
复习static,问题迎刃而解
回复 使用道具 举报
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: 本题需求:在外部类函数中创建内部类对象,调用内部类函数。 如何实现?

评分

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

查看全部评分

回复 使用道具 举报
问题一:
没错,我也想不到哪里错了,所以复制到Eclipse上,结果真的没错
问题二:
主函数是静态的,所以要想直接调用内部类方法,也需要内部类是静态的,内部类是静态的,内部类的成员和方法也都要是静态的,而且调用时应该加上外部类名
问题三:
如果将内部类改成静态的话:   OutClass.InnerClass in = new OutClass().new InnerClass();
如果改成静态的话:OutClass.InnerClass.成员
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马