什么是内部类呢?简单来说内部类就是:一个类中,包含了另一个一个类。

       

  java中内部类的出现主要是为了访问外部类数据的便捷性,一般用于类的设计。

  内部类的特点:

   内部类可以直接访问外部类的成员,外部类访问内部类,必须建立内部类的对象、

如下是内部类的简单例子:

class Outer {
	private int num = 3;

	public void method() {
            new Inner().show();
	}
           //将Inner放在Outer类中,Inner就是Outer的内部类
	class Inner { 
                  private int num=4;
		void show() {
                            int num=5;
			System.out.println(Outer.this.num);  //输出外部类的num   3

                        System.out.println(Inner.this.num);//输出内部类num   4
                        System.out.println(num);  //输出局部变量num   5
}
	Outer.Inner in=new Outer().new Inner();
	 in.show();
 Outer.Inner in=new Outer.Inner();
  in.show();
package com.whpudu.test;
class Outer{
	static int num=5;
	
	static class Inner{
		  static int num=4;
		static   void show() {
			   System.out.println(Outer.num);

                          System.out.println(Inner.num);
package com.whpudu.test;
class Outer{
	  void method() {
		final  int num=3; //java8中默认加了final修饰符
		  class Inner{
			    void show() {
			    	System.out.println(num);
			    }
		  }
		  new Inner().show();
	  }
	
}


public class OuterInner {
   public static void main(String[] args) {
	   new Outer().method();
}
}
class Fu{
	void show() {} ;
}
class Outer{
	void method() {
		  new Fu(){
		   void show() {
			   System.out.println("这是复写父类的的方法");
		   }
	   }.show();
	}
	 
}


public class OuterInner {
   public static void main(String[] args) {
	   
}
}
package com.whpudu.test;
class Fu{
	void show1() {} ;
	void show2() {} ;
}
class Outer{
	void method() {
		 Fu fu=new Fu(){
		   void show1() {
			   System.out.println("这是复写父类的show1方法");
		   }
		   void show2() {
			   System.out.println("这是复写父类的show2方法");
		   }
		   void show3() {
			   System.out.println("这是子类特有的方法");
		   }
		  };
		  fu.show1();
		  fu.show2();
		  //fu.show3();  这里要理解多态,我们把子类对象向上转型为Fu类,所有无法再调用子类的特有方法了,这里会报编译错误
	}
	 
}


public class OuterInner {
   public static void main(String[] args) {
	   new Outer().method();
}
}
package com.whpudu.test;
class Fu{
	void show1() {} ;
	void show2() {} ;
}
class Outer{
	void method() {
		new Fu(){
		   void show1() {
			   System.out.println("这是复写父类的show1方法");
		   }
		   void show2() {
			   System.out.println("这是复写父类的show2方法");
		   }
		   void show3() {
			   System.out.println("这是子类特有的方法");
		   }
		
	{show1();show2();show3();}};
	 
}
}


public class OuterInner {
   public static void main(String[] args) {
	   new Outer().method();
}
}