总述: 内部类作为Java中重要的机制,其创建和使用有许多独有的特点,本文主要介绍内部类对象的创建方法以及各种内部类的使用
一:什么是内部类
内部类是定义在类中的类,他可以访问所在外部类中的私有成员,并且仅其外部类中可见,达到隐藏自身的效果。
二:内部类的分类
内部类可分为4种,分别为:
1.成员内部类
和外部类中成员变量和成员方法处于并列位置的内部类
2.局部内部类
定义在外部类方法中的内部类
3.匿名内部类
没有名字,通常作为回调函数使用,且只能使用一次
4.静态内部类
三:成员内部类
1.成员内部类中对外部类成员变量的访问方式
方式一:直接通过变量名访问(默认使用外部类的引用)
1 class Outer{ 2 private int num; 3 4 public class Inner{ 5 public void InnerMethod() { 6 System.out.println(num); 7 } 8 } 9 }
此处,内部类Inner中的InnerMethod方法使用其所在外部类中的私有变量num
方式二:通过外部类的引用来调用外部类中的私有变量
1 class Outer{ 2 private int num; 3 4 public class Inner{ 5 public void InnerMethod() { 6 System.out.println(Outer.this.num);//不可直接使用外部类名进行调用 7 } 8 } 9 }
此处Outer.this是Java中的一种特殊的语法规则,用于表示一个外部类对象的引用
2.内部类对象的创建方法
格式为
外部类对象名.new 内部类名 (参数)
例如:
1 public class Test { 2 public static void main(String[] args) { 3 Outer out=new Outer(10); 4 5 Outer.Inner inn=out.new Inner();//在其他类中创建Inner对象,必须指明创建内部类的外部类对象 6 } 7 } 8 9 class Outer{ 10 private int num; 11 12 public Outer(int num) { 13 this.num=num; 14 } 15 16 public void method() { 17 Inner in=this.new Inner();//在内部类的方法中通过this创建内部类对象 18 } 19 20 public class Inner{ 21 public void InnerMethod() { 22 System.out.println(Outer.this.num);//不可直接使用外部类名进行调用 23 } 24 } 25 }
注意:Inner在其他类中的名字为Outer.Inner
四:局部内部类
1.作为定义在外部类方法中的内部类,仅有包含该内部类的方法可见,甚至外部类都不可见
2.局部内部类不能使用public或private修饰符修饰
3.局部类不仅可以访问外部类的私有变量,还可以访问方法中的局部变量
1 public void method2() { 2 class Inner2{ 3 public void Inner2Method() {//一个定义在方法中的局部内部类 4 System.out.println(num); 5 } 6 } 7 Inner2 in2=new Inner2();//注意:此处创建该内部类的对象不再使用this修饰符,因为该内部类仅方法内可见 8 in2.Inner2Method(); 9 }
五:匿名内部类
匿名内部类没有对象名,只能使用一次,并且必须要继承或实现一个类或接口,定义格式为:
1 new 父类/接口名(构造参数) { 2 内部类方法或变量 3 }
例如:
创建一个抽象的父类:
1 abstract class Father{ 2 public abstract void FatherMethod(); 3 };
在main方法中创建一个用于实现父类中抽象方法的匿名内部类
public class Test { public static void main(String[] args) { Father f=new Father() { public void FatherMethod(){ System.out.println("我实现了父类中的method方法"); } }; f.FatherMethod(); } }
五:静态内部类
将在以后介绍