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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 卟離不棄 中级黑马   /  2015-3-22 10:57  /  844 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 卟離不棄 于 2015-3-22 11:01 编辑

/*
* 成员内部类: 即作为外部类的一个成员存在,与外部类的属性、方法并列。
*
* 成员内部类的优点:
* ⑴ 内部类作为外部类的成员,可以访问外部类的私有成员或属性。
* (即使将外部类声明为private,但是对于处于其内部的内部类还是可见的。)
* ⑵ 用内部类定义在外部类中不可访问的属性。
* 这样就在外部类中实现了比外部类的private还要小的访问权限。
* 注意:内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两类。
* 对于一个名为outer的外部类和其内部定义的名为inner的内部类。
* 编译完成后出现outer.class和outer$inner.class两类。
*
*/
public class Outer {
        private static int i = 1;
        private int j=10;
        private int k=20;
        
        public static void outer_f1(){
            //do more something
        }
        public void outer_f2(){
            //do more something
        }
        
        //成员内部类
        class Inner{
//                static int inner_i =100; //内部类中不允许定义静态变量
                int j=100;//内部类中外部类的实例变量可以共存
                int inner_i=1;
               
                void inner_f1(){
                    System.out.println(i);//外部类的变量如果和内部类的变量没有同名的,则可以直接用变量名访问外部类的变量
                    System.out.println(j);//在内部类中访问内部类自己的变量直接用变量名
                    System.out.println(this.j);//也可以在内部类中用"this.变量名"来访问内部类变量
                    System.out.println(Outer.this.j);
                    //访问外部类中与内部类同名的实例变量可用"外部类名.this.变量名"。
                    System.out.println(k);//外部类的变量如果和内部类的变量没有同名的,则可以直接用变量名访问外部类的变量
                    outer_f1();
                    outer_f2();
                }
        }
        //外部类的非静态方法访问成员内部类
        public void outer_f3(){
            Inner inner = new Inner();//在内部类中创建外部类对象
            inner.inner_f1();//通过外部类对象调用内部类方法
        }

        //外部类的静态方法访问成员内部类,与在外部类外部访问成员内部类一样
        public static void outer_f4(){
                //方式1
            //step1 建立外部类对象
            Outer out = new Outer();
            //step2 根据外部类对象建立内部类对象
            Inner inner=out.new Inner();
            
            //step3 访问内部类的方法
            inner.inner_f1();
            //方式2:方式1的简写
//            Outer.Inner inner = new Outer().new Inner();
//            inner.inner_f1();
        }
}

public class OuterDemo {
        public static void main(String[] args) {
                Outer.outer_f4();               
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马