java中的内部类的总结

来源:互联网 发布:sql server怎么导入表 编辑:程序博客网 时间:2024/06/09 16:14


               一,介绍

                                               java中的内部类主要分为普通内部类,静态内部类,匿名内部类,局部内部类四种,其中匿名内部类较为常用,大家最好可以掌握它的使用方法,以便在以后的编程中使用它,下面分别介绍下这些内部类


                        1.普通内部类


                                 

public class Outer { private String name="zhangsan";     public  void test() {        InnerClass innerClass = new InnerClass();    System.out.println("内部类的属性:"+innerClass.name);        innerClass.test();}     //内部类    class InnerClass{        private String name="lisi";        public void test(){    //在内部类中使用外部类属性    System.out.println(Outer.this.name);    }        }}

             如上是一个普通的内部类,就是在一个public修饰的类中,放置一个其他的类,称之为内部类,类可以用public,default来修饰,内部类可以用public,default,protected,

private 来修饰,内部类可以继承其他类,也可以使用其他接口,可以与外部类的属性名,方法名相同,这是一个成员内部类,

            如果要在成员内部类中访问外部类属性:可以用OuterClass.this.属性

            如果在外部类中创建内部类对象:OuterClass.innerClass 变量名 = new OuterClass().new InnerClass();



            2.静态内部类

                            
public class StaticOuter {  private String name="zhangsan";  private static int age = 23;    public void test(){  InnerClass ic = new InnerClass();  }      static class InnerClass{  private String name="lisi";  private static int age = 21;      public void test() {System.out.println(StaticOuter.age );StaticOuter so = new StaticOuter();so.test();}  }}

                 这是静态内部类,静态内部就是在成员内部类上加了一个static ,值得注意的是在静态内部类中,不能访问外部类非静态的属性,还有创建内部类的方式如下

        StaticOuter.InnerClass innerClass2 = new StaticOuter.InnerClass();在lucene6.6中构建布尔查询时,就是用的这种方式来构建的


           3.匿名内部类

                 匿名内部类是常用的一种内部类,主要用于接口,因为对于有些接口的实现,我们只在某一个地方使用,如果为他特意创建一个类,显得太过于麻烦和臃肿,所以使用匿名内部类,代码如下

            

//Arrays.sort(stus,new StuComparator());Arrays.sort(stus,new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {if(o1.getAge() > o2.getAge()){return 1;}else {if(o1.getAge() < o2.getAge()){return -1;}}return 0;}});

                   在这个Arrays.sort方法中是要传入一个接口的实现类,的但是现在使用了匿名内部类来解决这个问题,这种方式经常在编程中使用,需要掌握



           4.局部内部类

                    即在方法中定义的内部类,与局部变量类似,在局部内部类前不加修饰符public或private,其范围为定义它的代码块。局部内部类在编程中是很少会用到的代码如下

                    

                     

public void method(){               int num2 = 44;        class JuIn{            public void zhanshi(){                /*                 * 按理说局部内部类访问局部变量,局部变量应该用final修饰,但是不用final修饰也是可以访问的,                 * 这是因为在JDK8以下必须用final修饰,不然会报错,                 * Cannot refer to a non-final variable a inside an inner class defined in a different method,                 * 但是在JDK8之后就不会出现这种状况                 * */                                System.out.print(num2);            }        }        System.out.println("访问局部变量"+num2);        //在局部创建内部类对象        JuIn ji = new JuIn();        ji.zhanshi();    }}


                  

 

原创粉丝点击