内部类:

定义:把类定义在其他类的内部,这个类就被称为内部类。

访问特点:

内部类可以直接访问外部类的成员,包括私有成员

如果外部类要访问内部类的成员,必须要通过创建对象来完成

分类:

成员内部类:定义在类中成员位置

局部内部类:定义在局部位置,一般是在成员方法内部。,一般不加修饰符,范围就是定义它的代码块。

静态内部类:被static 修饰的内部类  ,可以在不创建对象的情况下被实例化。

匿名内部类:一种特殊的局部内部类,他是通过匿名类来实现接口。


成员内部类

定义:在类内成员位置的内部类。

访问方式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;

例如:

publicclass wai {

  privateintage=22;

  

  publicclass nei {

     

    void show()

   {System.out.println(age);}

  }

  publicvoid test() {

     nei ne=new nei();

     ne.show();

  }

  

}

 

publicclass TEST {

   publicstaticvoidmain(String[] args) {

     wai.nei ne = new wai().new nei();

     ne.show();

 

   }

}



当内部类被静态修饰以后:外部类名.内部类名 对象名 = new 外部类名.内部类名();

例如:


 

public class wai {
  private static int age=22;
  
  static class nei {
	  
	 void show()
	{System.out.println(age);}
  }
  public void test() {
	  nei ne=new nei();
	  ne.show();
  }
  
}

public class TEST {
	public static void main(String[] args) {
		wai.nei  ne = new wai. nei();
		ne.show();

	}
}



内部类常用的修饰符:private  static用来保证数据的安全性和方便访问数据。

需要注意的是:静态内部类访问的外部类数据必须用静态修饰。就是如果是静态的就不需要调用外部类的对象来调用。

 

 

局部内部类:

访问特性:可以直接访问外部类成员

可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能

特点:

局部内部类访问局部变量必须用final修饰,因为局部内部类会随着方法的调用完毕而消失,这时局部对象并没有消失,还要使用之前的变量。用final修饰以后,这个变量就相当于一个存在堆内存的常量,还能被继续使用。

 

publicclass wai {

   privateinta = 22;

 

   publicvoid show() {

 

     finalintb = 33;//JDK1.7之前必須要加,不然會報錯,但是JDK1.8不用加

     class nei {

        publicvoid method(){

          System.out.println(a);

          System.out.println(b);

        }

 

     }

     nei ne = new nei();

     ne.method();

   }

}

 

publicclass TEST {

   publicstaticvoidmain(String[] args) {

     wai wa=new wai();

     wa.show();

 

   }

}




匿名内部类

定义:就是局部内部类的简化写法,本质就是一个继承了该类或者实现了该接口的子类匿名对象。

前提:存在一个类或者接口,类可以是具体的也可以是抽象的。

注意:匿名内部类不能定义构造函数,不存在任何的静态成员变量和成员方法

         因为匿名内部类是特殊的局部内部类,所有对局部内部类的约束对匿名内部类也是存在的。

格式:

new 类名或者接口名(){

                 重写方法;

           } ;