首页 > 代码库 > Java之内部类

Java之内部类

内部类分为:

   

局部内部类:

    局部内部类就是在类的方法中定义的类。
   注意:因为局部内部类的只能在其所在的方法中访问,所以局部内部类不能使用访问控制权限和static修饰符

例:
public class LocalInnerClass{
	public static void main(String[] args){
		 class test{
                     void print(){
              	           System.out.println("你好局部内部类") ;
                     }
		 }

		 new test().print() ;//创建局部内部类的对象,并且调用实例方法print。
	}
}

成员内部类——非静态内部类:

                  注:
                        1.  非静态内部类可以当做外部类的实例成员,所以它可以使用任意的访问控制符如:private、protected、public等修饰。
                        2.非静态内部类的方法访问某个变量时,系统优先在该方法内查找是否存在该名字的局部变量,如果存在就使用该变量;如果不存在,则到该方法所在的内部类中                             查找是否存在该名字的成员变量。
                        3.非静态内部类不能拥有静态成员。
例:
public class Cow{
      private double weight ;
      public Cow(){

      }

      public Cow(double weight){
      	this.weight = weight ;
      }
          //创建非静态内部类
	  private class CowLeg{
	  	private double length ; //裤子的长度
	  	private String color ;  //裤子的颜色

	  	public CowLeg(){    //无参构造

	  	}

	  	public CowLeg(double length, String color){ //有参构造
	  		this.length = length ;
	  		this.color = color ;
	  	}

	  	public void info(){   //用来显示
	  		System.out.print("当前牛仔裤颜色是:"+color+" 长:"+length) ;
	  	}
	  }

	  public void test(){
	  	CowLeg cl = new CowLeg(15,"blue") ; //创建内部类的实例
	  	cl.info() ; //调用成员方法
	  	System.out.println(" 宽:"+weight) ;
	  }

      public static void main(String[] args){
             new Cow(10).test() ; //创建Cow实例调用成员方法

      }
}

成员内部类——静态内部类:

       注:
               1.静态内部类可以当做外部类的类成员。
               2.静态内部类不能访问外部类的实例成员,只能访问外部类的类成员。
               3.静态内部类可以拥有类成员或实例成员。
例:
public class StaticInnerClassTest{
          //创建静态内部类
	static class StaticInnerClass{
		private static int age ; //定义年龄
		public StaticInnerClass(){  //无参构造

		}
		public StaticInnerClass(int age){
                       this.age = age ;
		}
		public void accessOuterProp(){  //用来显示成员变量
                       System.out.println(age) ;
		}
	}

	public static void main(String[] args){
		 new StaticInnerClassTest.StaticInnerClass(15).accessOuterProp() ;//创建静态内部类的实例并且调用其成员方法accessOuterProp。
	}
}

匿名内部类:

       匿名内部类主要是用于需要只创建一次使用的类。
       注:
              在Java8之前,Java要求被局部内部类、匿名内部类访问的局部变量必须使用final修饰,从Java8开始这个限制被取消了,Java8更加智能:如果局部变量被匿名内部类访问,那么该局部变量相当于自动使用final修饰。
     例:
        
interface Product{
	public void getPrice() ;
}

public class AnonymousTest{
	public static void main(String[] args){
		Product pd = new Product(){
                     public void getPrice(){
                      	System.out.println("100元") ;
                     }
		} ;
		pd.getPrice() ;
	}
}

            



Java之内部类