• 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();
    
        }
    
    }
    
  • 相关阅读:
    Storyboard中segue使用总结
    Present ViewController Modally
    UILabel设置富文本格式显示
    objective-c 中随机数的用法 (3种:arc4random() 、random()、CCRANDOM_0_1() )
    ios中static的作用
    NSBundle的使用,注意mainBundle和Custom Bundle的区别
    OC的基础语法OC继承和复合语言特性目标动作回调
    动态规划-被3整除的子序列
    A
    Coins POJ
  • 原文地址:https://www.cnblogs.com/superfly123/p/10444193.html
Copyright © 2020-2023  润新知