您的位置:首页 > 编程语言 > Java开发

java中的内部类的总结

2017-08-02 20:31 232 查看

               一,介绍

                                               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>() {
@Override
public 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();
}
}


                  

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: