zoukankan      html  css  js  c++  java
  • 1-15内部类

    内部类的分类

    内部类,顾名思义就是在一个类的内部声明一个类。内部类主要分为:

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

    内部类的特点:

    内部类可以直接访问外部类的成员,包括private修饰的变量和方法

    在编写swing程序时内部类出现的频率比较高,不过目前大部分软件公司基本都不会使用swing,所以本节内容简单了解即可。

    静态内部类

    1.静态内部类可以等同看做静态变量
    2.静态内部类可以直接访问外部类的静态数据

    public class OuterClass{
    
        //静态变量
        private 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);
                m1();
            }
    
            //成员方法
            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();
    
        }
    
    }
    

    成员内部类

    1.成员内部类可以等同看做成员变量
    2.成员内部类中不能有静态声明
    3.成员内部类可以访问外部类所有的数据

    public class OuterClass{
    
        //静态变量
        private 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{
    
            //静态方法
            //public static void m3(){}
    
            //成员方法
            public void m4(){
                System.out.println(s1);
                m1();
    
                System.out.println(s2);
                m2();
            }
        }
    
        public static void main(String[] args){
    
            //创建外部类对象
            OuterClass oc = new OuterClass();
    
            InnerClass inner = oc.new InnerClass();
    
            inner.m4();
    
        }
    
    }
    

    匿名内部类

    一个没有名字的类就叫做匿名内部类

    public class Test{
    
        //静态方法
        public static void m1(Animal a){
            a.eat();
        }
    
        //入口
        public static void main(String[] args){
    
    
            //使用匿名内部类的方式执行m1方法
            //整个这个"new Animal(){}"就是个匿名内部类
            m1(new Animal(){
                public void eat(){
                    System.out.println("吃猫粮");
                }
            });
    
            //匿名内部类的优点:少定义一个类.
            //缺点:无法重复使用!
        }
    
    }
    
    
    //接口
    interface Animal{
    
    
        void eat();
    
    }
    

    局部内部类

    局部内部类在访问局部变量的时候,局部变量必须使用final修饰,在JDK8之后,这个限制被取消了

    public class OuterClass{
    
        //方法
        public void m1(){
    
            //局部变量
            final int i = 10;
    
            //局部内部类
            //局部内部类不能用访问控制权限修饰符修饰。
            class InnerClass{
    
                //内部类不能有静态声明
                //public static void m1(){}
    
                //成员方法
                public void m2(){
                    System.out.println(i); // 10
                }
    
            }
    
            //调用m2
            InnerClass inner = new InnerClass();
            inner.m2();
    
        }
    
    
        public static void main(String[] args){
            OuterClass oc = new OuterClass();
            oc.m1();
    
        }
    
    }
    
  • 相关阅读:
    MySQL Server 5.7.13
    安装SQL Server 2008数据库(带完整图解)
    一路顺风-影评
    vs2013配置opencv3.2.0
    #include”* .h“ 在查找预编译头使用时跳过
    VS2010属性表的建立与灵活运用
    VS2013+opencv2.4.9配置
    C++ 文件操作(CFile类)
    一验证码识别的小程序源码
    在VS2005编程中,有的时候DataGridView数据源有几个表的联合查询,而系统又有限制为一个表,怎么办?
  • 原文地址:https://www.cnblogs.com/superfly123/p/10444193.html
Copyright © 2011-2022 走看看