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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 林豪 中级黑马   /  2012-6-23 22:27  /  1548 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Demo{
        static int i = 5;
        public static class I1{
                public  class I2{
                        public class I3{
                                public I3(){
                                        System.out.println("读到我啦");
                                }
                        }
                               
                }
        }
}

class Demo1{
        public static void main(String[] args){
                //要怎么才能读到I3?
        }
}

3 个回复

倒序浏览
class Demo{
        static int i = 5;
        public static class I1{
                public  class I2{
                        public class I3{
                                public void I3(){//定义一个方法需要有返回类型.
                                        System.out.println("读到我啦");
                                }
                        }
                                
                }
        }
}

class Demo1{
        public static void main(String[] args){
                //要怎么才能读到I3?
                                
                                        Demo.I1 D1 = new Demo.I1();//拿到I1对象.因为I1是静态的直接被类名调用.
                                        Demo.I1.I2 D12 = D1.new I2();//拿到I2对象,I1下的I2,可以通过I1对象拿到.
                                        Demo.I1.I2.I3 D123 = D12.new I3();//拿到I3对象,I2下的I3,可以通过I2对象拿到.

                                        D123.I3();
        }
}
这是一个内部类的嵌套.我想在今后的开发中不会用到这种.但是能帮你理解内部类的思想.
固定的道理:非静态的方法只能通过创建对象才能调用.关键问题在于内部类怎么创建对象.上面是我写的方法.你看一下.
回复 使用道具 举报
吴琼 发表于 2012-6-23 23:28
class Demo{
        static int i = 5;
        public static class I1{

public void I3(){//定义一个方法需要有返回类型.
这里好像是构造方法啊,亲~!
回复 使用道具 举报

因为I1是Demo中的静态成员:所以可以这样得到I1的对象:
   Demo.I1 D1 = new Demo.I1();
因为I2不是静态的,所以必须new一个I2对象:
   Demo.I1.I2 D12 = D1.new I2();
同上;
    Demo.I1.I2.I3 D123 = D12.new I3();
通过new I3就会执行I3的构造函数;

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马