二十二、Java基础之内部类

静态内部类、成员内部类、局部内部类、匿名内部类

一、静态内部类

/*
关于静态内部类:
1.静态内部类可以等同看做静态变量
2.内部类重要的作用:可以访问外部类中的私有数据
3.静态内部类可以直接访问外部类的静态数据,无法直接访问成员变量和成员方法
*/

public class Test01 {

    //静态变量
    static  String s1="A";

    //成员变量
    private String s2="B";

    //静态方法
    private static void m1(){
        System.out.println("静态内部方法m1执行。。。。");
    }
    //成员方法
    private void m2(){
        System.out.println("成员方法m2执行。。。。");
    }
    //静态内部类
    //可以用访问权限的修饰符修饰
    //public protected private
    static class InnerClass{
        //静态方法
        public static void m3(){
            System.out.println(s1);
            //System.out.println(s2);

            m1();
           // m2();

        }
        //成员方法
        public void m4(){
            System.out.println("m4....");
        }
    }

    public static void main(String[] args){

        //访问静态内部类的静态方法
        Test01.InnerClass.m3();//A//静态内部方法m1执行。。。。

        //访问静态内部类的成员方法,需要对象
        InnerClass inner=new Test01.InnerClass();
        inner.m4();//m4....
        inner.m3();//A//静态内部方法m1执行。。。。



    }
}

二、成员内部类

/*
关于成员内部类:
1.成员内部类可以等同看做成员变量
2.成员内部类不能有静态声明(静态方法,静态变量)
3.成员内部类可以访问外部的所有方法,变量
*/
public class Test01 {

    //静态变量
    static  String s1="A";

    //成员变量
    private String s2="B";

    //静态方法
    private static void m1(){
        System.out.println("成员内部方法m1执行。。。。");
    }
    //成员方法
    private void m2(){
        System.out.println("成员方法m2执行。。。。");
    }
    //成员内部类
    //可以用访问权限的修饰符修饰
    //public protected private
    class InnerClass{

        //静态变量
            //static int n=100;
        //静态方法
        //内部类com.study.内部类.成员内部类.Test01.InnerClass中的静态声明非法修饰符 'static' 仅允许在常量变量声明中使用
//        public static void m3(){
//            System.out.println(s1);
//            //System.out.println(s2);
//
//            m1();
//           // m2();
//
//        }
        //成员方法
        public void m4(){
            System.out.println("m4....");
        }

    }

    //入口
    public static void main(String[] args){

        //创建外部对象
        Test01 t=new Test01();

        InnerClass inner=t.new InnerClass();

        inner.m4();//m4....
    }
}

三、局部内部类

/*
局部内部类:
局部内部类等同于局部变量

重点:局部内部类在访问局部变量的时候,局部变量必须使用final修饰
*/

public class Test01 {

    //方法
    public void m1(){

        //局部变量
        final int i=10;// 从内部类引用的本地变量必须是最终变量或实际上的最终变量

        //局部内部类
        //局部内部类不能用访问控制权限修饰符修饰
        class InnerClass{

            //内部类不能有静态声明
           // public static void m1(){}

            //成员方法
            public void m2(){
                System.out.println(i);

            }
        }
       // i=100;Error:(27, 36) java: 从内部类引用的本地变量必须是最终变量或实际上的最终变量
        //调用m2
        InnerClass inner =new InnerClass();
        inner.m2();

        }

    public static void main(String[] args){

        Test01 t= new Test01();
        t.m1();//10
    }
}

四、匿名内部类

/*
匿名内部类:指的是类没有名字

*/

原始实现方式
public class Test01 {

    //静态方法
    public static void test(CustomerService cs){

        cs.logout();
    }

    //入口
    public static void main(String[] args){

        //调用test方法
        test(new CustomerServiceImpl());//系统已退出!

       }
}


interface CustomerService{

    //退出系统
    void logout();
}

//编写一个class实现CusromerService接口
class CustomerServiceImpl implements CustomerService{
    public void logout(){
        System.out.println("系统已经退出!");
    }
}

使用匿名内部类实现

public class Test01 {

    //静态方法
    public static void test(CustomerService cs){

        cs.logout();
    }

    //入口
    public static void main(String[] args){

        //调用test方法
        //test(new CustomerServiceImpl());

        //使用匿名内部类的方式执行test方法
        test(new CustomerService() {
            @Override
            public void logout() {

                System.out.println("系统退出!");

            }
        });
        //匿名内部类优点:少定义一个类
        //缺点是:无法重复使用!

    }
}


interface CustomerService{

    //退出系统
    void logout();
}
/*
//编写一个class实现CusromerService接口
class CustomerServiceImpl implements CustomerService{
    public void logout(){
        System.out.println("系统已经退出!");
    }
}
*/


原文地址:https://www.cnblogs.com/chushujin/p/10126176.html