黑马程序员技术交流社区

标题: 内部类和方法有什么区别? [打印本页]

作者: 雪中鱼01    时间: 2016-10-15 10:02
标题: 内部类和方法有什么区别?
Rt,有什么必要写内部类?


作者: 若白衣卿相    时间: 2016-10-15 12:55
访问权限的问题吧,感觉相当于一个private类

作者: Jerry007    时间: 2016-10-15 13:42
一般来说开发用的比较少,但是匿名内部类是可以当做形式参数进行传递的.
关于内部类
        A:内部类概述:定义在类中的类叫做内部类
        B:内部类访问特点
                a:内部类可以直接访问外部类的成员,包括私有。
                b:外部类要访问内部类的成员,必须创建对象。
                外部类名.内部类名 对象名 = 外部类对象.内部类对象;
                Outer.Inner oi = new Outer().new Inner();
        C:private 修饰内部类
                需要对外提供公共的创建内部类的方法,才能使用
                Inner i = new Inner();
        D:static 修饰内部类
                外部类名.内部类名 对象名 = 外部类名.内部类对象;
                Outer.Inner oi = new Outer.Inner();
        E:局部内部类访问局部变量,局部变量必须用final修饰
                因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用
                Outer{
                        method() {
                                final int a = 10;
                                Inner {
                                       
                                }
                        }
                }
                但是jdk1.8取消了这个事情
[Java] 纯文本查看 复制代码
package com.itheima.exam.time1;

public class Test5 {        //Test5为基本测试类

        /**
         * 如何调用内部内的方法
         */
        public static void main(String[] args) {//测试类主方法
                /*Person p = new Person();//第一种方法:1.先创建一个外部类对象P
                p.show();        //2.调用成员方法show(),然后在show()方法中创建Student对象s,通过s.method()调用内部类中的方法 */
                Person.Student ps = new Person().new Student();        //第二种方法:创建内部类对象
                ps.method();        //直接调用内部类中的method()方法
                //注意:如果内部类被私有,即private class Student{},
                //此时第二种方法不能使用,因为私有的内部类不能被直接访问,此时如果需要调用内部类中method()方法只能通过第一种方法.
        }
}

class Person {                //Person外部类
        int a = 10;                //Person类的成员变量
       
        class Student {        //Student内部类,也可以将其看作是Person类的一个成员.
                public void method() {        //内部类中的method()方法
                        System.out.println(a);//可以直接方法外部内的成员变量a
                }
        }
       
        public void show(){                //Person类的成员方法
                Student s = new Student();
                s.method();
        }
}





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