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。

  • 相关阅读:
    javaweb基础笔记(2)
    javaweb基础笔记(1)
    java基础笔记(11)
    java基础笔记(10)
    java基础笔记(9)
    洛谷 P2648 赚钱
    AcWing 走廊泼水节 题解
    对于有向图多个点到一个点的求法
    分层图的四倍经验
    洛谷 P4822 [BJWC2012]冻结
  • 原文地址:https://www.cnblogs.com/zxjie/p/4123738.html
Copyright © 2011-2022 走看看