• 内部类


    内部类

    内部类有两种情况:

    (1)     在类中定义一个类(私有内部类,静态内部类)

    (2)     在方法中定义一个类(局部内部类,匿名内部类)

    私有内部类 —— 在方法之间定义的内部类,非静态

    (1)     在外部类的作用范围内可以任意创建内部类对象,即使内部类是私有的(私有内部类)。即内部类对包围它的外部类可见。

    Java代码 

    //代码1:内部类对外部类可见  

    class Outer{  

         //创建私有内部类对象  

         public Inner in=new Inner();  

         //私有内部类  

         private class Inner{  

              ...  

         }  

    }

    (2)     在内部类中可以访问其外部类的所有域,即使是私有域。即外部类对内部类可见。

    Java代码 

    //代码2:外部类对内部类可见  

    class Outer{  

           //外部类私有数据域  

           private int data=0;  

           //内部类  

           class Inner{  

               void print(){  

                     //内部类访问外部私有数据域  

                     System.out.println(data);  

               }   

           }  

    静态内部类  ——  在方法间定义的内部类,静态

    内部类也有静态的区别,这就是静态内部类

    Java代码 

    package hr.test;  

    //代码3:静态内部类对外部变量的引用  

    public class Outer{    

            private static int i=0;          

            //创建静态内部类对象  

        public Inner in=new Inner();    

        //静态  

        private static class Inner{    

            public void print(){  

                             System.out.println(i);   //如果i不是静态变量,这里将无法通过编译。  

                    }  

        }    

    }   

    静态内部类和私有内部类最大的区别在于,静态内部类中无法引用到其外围类的非静态成员。

    局部内部类 —— 在方法中定义的内部类

    方法内部类也有两个特点

    (1)  方法中的内部类没有访问修饰符, 即方法内部类对包围它的方法之外的任何东西都不可见。

    (2)  方法内部类只能够访问该方法中的局部变量,所以也叫局部内部类。而且这些局部变量一定要是final修饰的常量。

    Java代码 

    class Outter{  

          public void outMethod(){  

                 final int beep=0;  

                 class Inner{  

                       //使用beep  

                 }  

                 Inner in=new Inner();  

          }  

    内部类的特点总结

    在方法间定义的非静态内部类:

    内部类中不能定义静态成员变量。

    外围类和内部类可互相访问自己的私有成员。

    在方法间定义的静态内部类:

    只能访问外部类的静态成员。

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

    该内部类没有任何的访问控制权限

    外围类看不见方法中的局部内部类的,但是局部内部类可以访问外围类的任何成员。

    方法体中可以访问局部内部类,但是访问语句必须在定义局部内部类之后。

    局部内部类只能访问方法体中的常量,即用final修饰的成员。

    在方法中定义的匿名内部类:

    没有构造器,取而代之的是将构造器参数传递给超类构造器。

  • 相关阅读:
    AJAX
    正则表达式
    SQL
    foreach 的本质
    C#
    Dojo的subscribe和publish的简单使用
    Dojo的Gridx使用jsonrest需要注意的地方
    如何让Button使用自定义icon
    Djanog结合jquery实现ajax
    如何设置静态文件路径
  • 原文地址:https://www.cnblogs.com/pengpeng520/p/7601089.html
Copyright © 2020-2023  润新知