• Java学习笔记五(内部类 )


    1 内部类的优缺点

      在一个类的内部还存在另外一个类,则成为内部类。内部类可以是public 或者private,对其访问的控制与类的成员变量和 成员方法相同。

      内部类的缺点:内部类其实严重破坏了良好的代码结构

      内部类的优点:方便的访问外部类中的私有属性;将内部类拿到外部之后,代码会增加,复杂度也会增加;

    2 基本的内部类结构

    class Outer{
        
        private String info = "Hello outer inner class";
        
        class Inner{
            public void print(){
                System.out.println(info);
            }
        }
        
        public void fun(){
            System.out.println("Outer class fun");
            new Inner().print();
        }
    }
    
    
    public class InnerDemo {
        
        public static void main(String [] args){
            
            //定义内部类
            Outer.Inner in = null;
            in =new Outer().new Inner();
            in.print();
            new Outer().fun();
            new Outer().new Inner().print();
        }
    
    }

    特点分析:定义内部类的时候必须指定所属的外部类;必须先实例化外部类,才能实例化内部类;

    3 static 声明的内部类

    class Outer{
    
        private static String info = "Hello outer class";
        static class Inner{
            public void print(){
                System.out.println(info);
            }
        };
        
        public void fun(){
            new Inner().print();
        }
        
    }
    
    public class InnerDemo{
    
        public static void main(String []args){
            
            //定义方式
            Outer.Inner in = null;
        //    in = new Outer().new Inner();// 错误的方式
            
            in = new Outer.Inner();
            
            in.print();
            new Outer.Inner().print();
    }
    }

    特点分析:可以直接通过外部类.内部类直接访问,具有一定的局限性,内部类只能访问外部类的静态数据成员。

    4私有内部类 

    class Outer{
    
        private  String info = "Hello outer class";
        private class Inner{
            public void print(){
                System.out.println(info);
            }
        };
        
        public void fun(){
            new Inner().print();
        }
        
    }
    
    public class InnerDemo{
    
        public static void main(String []args){
            
            /*定义方式错误
            Outer.Inner in = null;
            
            in = new Outer().Inner();
            in.print();
            */
            
            new Outer().fun();
    }
    }

    特点分析:如果一个内部类只希望被外部类进行访问,可以使用private来声明内部类;必须在外部类中生成内部类进行操作,不能使用new Outer().new Inner()进行定义。

    5 在类的方法中定义的内部类

    class Outer{
        private String info = "Hello outer class";
        
        //无参数的方法
        public void fun(){
            class Inner1{
                public void print(){
                    System.out.println(info);
                }
            }
            
            new Inner1().print();
        }
        
        //有参数的方法
        public void fun(final String str){
            class Inner2{
                public void print(){
                    System.out.println(info);
                    System.out.println(str);
                }
            }
            
            new Inner2().print();
        }
        
    };
    
    public class InnerDemo{
        
        public static void main(String []args){
            new Outer().fun();
            new Outer().fun("zhang");
        }
    }

    特点分析:在外部类的方法中生成一个内部类去调用内部类中的方法;如果外部类的方法中需要传递参数,参数的类型必须为final。

  • 相关阅读:
    第4章.计算节点
    Eclipse插件ViPlugin2.X的破解方法
    金刚经
    js
    C++ 重写重载重定义区别
    string::substr()简介
    信息熵与二进制
    一个简单的条件概率问题
    HPLINUX hplinux 安装升级 至 jdk1.8
    linux 解压命令
  • 原文地址:https://www.cnblogs.com/zxjie/p/4123738.html
Copyright © 2020-2023  润新知