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


    在一个类的内部定义的类,称为内部类
    
    内部类主要分类:
    
    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("系统以安全退出 !");    
    //    }
        
    //}
  • 相关阅读:
    jQuery
    基于Js实现的UrlEncode和UrlDecode函数代码
    利用缓存、Timer间隔时间发送微信的实例,很有用的例子
    VisualStudio 自动排版等 快捷键
    正则表达式判断手机号码属于哪个运营商
    .Net常用方法汇总
    .NET中的三种Timer的区别和用法
    C# List和String互相转换
    Tempdb--TempDB Basic
    Tempdb--查看tempdb使用的脚本
  • 原文地址:https://www.cnblogs.com/Deng1185246160/p/4230712.html
Copyright © 2020-2023  润新知