黑马程序员技术交流社区

标题: 有关内部类见解 [打印本页]

作者: lnz_黑仔    时间: 2014-12-28 22:04
标题: 有关内部类见解
/*

        内部类和外部类之间的调用方式:
               
                内部类怎么调用外部类成员呢?
                        当成自己的成员来用
               
                外部类调用内部类:
                        在自己某个方法中,创建一个内部类对象
                                内部类名 对象引用 = new 内部类名();

                在测试类中直接调用内部类,格式:
                        外部类名.内部类名 对象引用 = new 外部类名().new 内部类名();
*/

class Outer
{
        private  int num = 10;

        class Inner
        {
                public void show()
                {
                        System.out.println(num);
                }
        }

        public static void method2()//方法一给调用其变量就会从内存上消失;所以无法给其内部类使用
        {       
                //int num2;//局部内部类访问局部变量,该变量必须被final修饰。因为局部变量会在方法调用完毕后,立马消失。
                final int num2;//正确方式
                //public int num2;//出错,局部变量必须在方法之外给初始化;在类加载时给初始化;不可以在方法直接定义,main函数可以
                //System.out.println(num2);//出错;须初始化变量(类的构造方法的作用);没有给初始化不可使用,main函数可以
                //因为main是不需要创建对象就可以随类加载而加载;而其他类是要在其对象被建立时才会加载并且对象是在堆内存中
                        class Inner1
                {        public int num2 = 30;//这里算重新定义;与上面定义无关;
                        public void show()
                        {
                                //public int num2 = 20;//出错
                                System.out.println(num2);//出错;从内部类中访问本地变量num2需要声明为最终类型;
                        }
                }
        /*        static class Inner4//出错;非法表达式开始;局部方法内不可以有静态成员;
                {
                        public void show4()
                        {
                        System.out.println("4444");
                        }
                }
                */
                Inner1 i1=new Inner1();
                i1.show();
        }

        public void method()
        {
                //Inner1 i  = new Inner1();
                //出错,这里算局部方法是不可以直接调用其他局部方法的对象(内部类)只可以直接创建了调用本类中方法外的内部类
                Inner i  = new Inner();//本类中调用本类内方法外的内部类方式
                i.show();
                Outer o=new Outer();//本类中调用方法内部类的方式
                o.method2();
        }
        //静态内部类
        static class Inner3
        {       
                public  void show3()//若该方法是静态其类也必须静态;其类是静态其方法可以不是静态;
                {
                        System.out.println("123");
                }
        }
        public int getNum()
        {
                return num;
        }

}


class InnerClassDemo1
{       
        public static void main(String[] args){
                //public int b=2;//出错,局部变量前面不可以加修饰符;成员变量才可以这么定义
                int b=2;
                System.out.println(b);
                Outer a = new Outer();
                a.method();//外部类调用其他类中方法外的内部类方式A1
                Outer.Inner a2 = new Outer().new Inner();//另一方式A2创建了内部类的对象调用方法;相对于非静态内部类
                a2.show();
                a.method2();//外部类调用其他类中方法内的内部类的方式B(该方式只有一种;其实相当于创建类对象调用方法)
                System.out.println(a.getNum());
                //静态的方式:
                Outer.Inner3 i3=new Outer.Inner3 ();
                i3.show3();
        }
}



作者: I空空    时间: 2014-12-28 22:20
学习了,楼主写的很好
作者: abathe    时间: 2014-12-28 22:31
这笔记做的详细,顶起
作者: qowoeo7538    时间: 2014-12-28 22:40
是楼主的笔记吗?好长..
作者: x277402301t    时间: 2014-12-29 23:06
写的不错哦!
作者: 赵涛涛    时间: 2014-12-29 23:23
这是楼主的笔记?收藏之,谢谢!




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