zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    系统设计题:如何设计一个电商平台积分兑换系统!
    服务器上部署多台mysql
    log4j日志输出格式一览
    Intellij IDEA 智能补全
    什么是旅行商问题——算法NP、P、NPC知识
    如何找到两个升序数组归并后的升序数组的中位数
    Java 不同进制的字面值
    Android 进程和线程
    美图秀秀2015年实习生android应用开发方向招聘笔试题
    Android:Layout_weight的深刻理解
  • 原文地址:https://www.cnblogs.com/zxjie/p/4123738.html
Copyright © 2011-2022 走看看