java中的内部类的总结


               一,介绍

                                               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();
    }
}


                  

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值