首页 > 代码库 > 第十八节(内部类(实例,静态,局部,匿名))

第十八节(内部类(实例,静态,局部,匿名))

在一个类的内部定义的类,称为内部类内部类主要分类:1. 实例内部类2. 局部内部类3. 静态内部类实例内部类 :1.  创建实例内部类,外部类的实例必须已经创建2. 实例内部类会持有外部类的引用3. 实例内部不能定义 static 成员,只能定义实例成员静态内部类匿名内部类


/*    内部类: 实例内部类(成员内部类)        1. 成员内部类可以等同看做成员变量                2. 成员内部类中不能有静态声明                3. 成员内部类可以访问外部类所有的数据*/public class OuterClass{    // 静态变量    private static String s1 = "Ming";    // 成员变量    private String s2 = "keke";        // 静态方法    private static void m1(){        System.out.println("我是静态方法 !");    }        // 成员方法    private void m2(){        System.out.println("我是成员方法 !");    }                // 成员内部类,可以访问控制权限的修饰符修饰    // public private,protected,缺省    class InnerClass{                // 静态方法        // public static void m3(){}                public void m4(){            // 静态的            System.out.println(s1);            m1();            // 成员的            System.out.println(s2);            m2();                    }        }                // java入口    public static void main(String[] args){                // 创建外部类对象        OuterClass oc = new OuterClass();                InnerClass inner = oc.new InnerClass();                inner.m4();            }    }
/*    关于静态内部类            1. 静态内部类可以等同看做静态变量                2. 内部类的重要的作用: 可以访问外部类中的私有的属性                3. 静态内部类可以直接访问外部类的静态数据,无法直接访问成员变量*/public class OuterClass{    // 静态的成员变量    private static String s1 = "Ming";    // 成员变量    private String s2 = "keke";        // 静态方法    private static void m1(){        System.out.println("我是一个静态方法 !");        }         // 成员方法    private void m2(){        System.out.println("我是一个成员方法");        }        /*         静态内部类        可以用访问控制权限的修饰符修饰        public private,protected,缺省    */    static class InnerClass{            // 静态方法        public static void m3(){            System.out.println(s1);            m1();                                        // 无法直接访问成员变量            // 成员的            //System.out.println(s2);            //m2();                        }                // 成员方法        public void m4(){            // 静态的            System.out.println(s1);            m1();            }                }                public static void main(String[] args){                // 执行m3()方法        OuterClass.InnerClass.m3();                // 执行m4()方法        InnerClass inner = new OuterClass.InnerClass();        inner.m4();        }}
/*    内部类: 局部内部类        等同于局部变量;        重点:局部内部类在访问局部变量的时候,局部变量必须使用final修饰        */public class OuterClass{    // 方法    public void m1(){                // 局部变量        final int i = 100;                // 局部内部类是不能访问控制权限修饰符修饰        class InnerClass{                    // 内部类不能有静态声明            //public static void m1(){}                    // 成员方法            public void m2(){                System.out.println(i);                }                }                // 调用m2        InnerClass ic = new InnerClass();        ic.m2();                    }        // java入口    public static void main(String[] args){                OuterClass oc = new OuterClass();        oc.m1();            }    }
/*    匿名内部类:是指 类没有名字*/public class Test{        // 静态方法    public static void arry(UserService u){        u.logout();    }            public static void main(String[] args){                // 调用arry方法        // new UserServiceImpl(){} 这个就是匿名内部类        //arry(new UserServiceImpl());                arry(new UserService(){            public void logout(){                System.out.println("我要退出系统!");            }        });                    }}// 定义接口interface UserService{    // 退出系统    void logout();}//class UserServiceImpl implements UserService{    //    void logout(){//        System.out.println("系统以安全退出 !");    //    }    //}

 

第十八节(内部类(实例,静态,局部,匿名))