224/225_尚学堂_高淇_java300集最全视频教程_内部类

package hong.study.inner_class;

/**
 * 内部类仍然是一个独立的类,编译之后会产生相对应的class文件,但是前面冠以外部类类名和¥符号
 * 内部类可以使用修饰符,public、private、protected、default
 * @author Hong
 *
 */

public class Study01 {
    //Class01和Class02就看成外部类的成员来看待
    private static String name;
    private int age;
    //静态内部类
    private static class Class01{
        /*
         *1、其中可以定义普通的成员变量和静态的成员变量
         *2、只能调用外部类的静态的方法和静态的属性,该类和外部类的属性和方法是平级的
         *3、在不相关类中,可以直接创建静态内部类的对象(不需要先创建外部类对象,才能创建静态内部类对象) Study01.Class01 c = new Study01.Class01();
         *4、静态内部类实际上和其外部类联系很少,也就是命名空间上的联系 
         */

    }
    //成员内部类
    private class Class02{
        /*
         * 1、成员内部类就像一个成员变量一样存在于外部类中
         * 2、成员内部类可以访问外部类的所有成员,包括private
         * 3、成员内部类的this指内部类本身,要想拿到外部类对象可以使用:外部类名.this
         * 4、成员内部类的对象一定要绑定在外部类对象上,因此想创建内部类对象必须先创建外部类对象
         * 5、成员内部类不能有静态成员(除非声明成常量final,并且是常量表达式)或者静态方法
         */
    }

    public void sayHello(){
        String s = "Hello";
        //方法内部类
        class Class03{
            /*与方法中的局部变量的地位类似
             * 1、不能用public、private等修饰
             * 2、只能在声明的方法内可见,只在本方法中可用
             * 3、内部定义的内容:不能有静态变量和方法
             * 4、不能使用方法中的局部变量,例如s,除非是final修饰的局部变量
             *      *原因:方法中的局部变量在栈中创建,随着方法执行完,就会被销毁,如果执行方法的时候创建了方法内部类对象,而且使用了局部变量
             *      *因为类对象是在堆中创建的,有可能方法中的局部变量销毁之后,堆中还有这个对象,还在用这个局部变量,此时会出现错误
             *      *如果声明成final,那么在类的对象使用的时候,会拷贝一份该常量,即使常量被销毁,还是有这个值可以使用。
             */
        }
        //匿名内部类
        Runnable runnable = new Runnable() {//这里并不是new了接口,而是定义了匿名内部类的实体,并创建了匿名内部类的一个实例
            //注意,这里runnable不是创建的匿名内部类的名字,而是创建的匿名内部类实例的名字
            /*
             * 使用方式:1、继承式;2、接口式;3、参数式
             * 格式就是采用这种格式,这里采用接口,还可以采用继承的形式
             * 这里的匿名内部类放在方法中,也是方法内部类,需要符合方法内部类的要求
             */

            @Override
            public void run() {
                // TODO Auto-generated method stub

            }
        };

    }
}

你可能感兴趣的:(尚学堂Java300集学习笔记)