定义: 将一个类的定义放在另一个类定义的内部,这就是内部类.
1.功能1: 代码的隐藏和组织机制.
内部类的可见性: 由在定义内部类时的访问控制权限决定(前提是外围类是public的)
public : 在任何其他类中都可见,前提是要用"外部类名.内部类名"的方式
访问时要以 "A.B"的形式访问
protected 和 没有访问修饰符: 在本包内可以访问, 访问形式也是"A.B"
private : 只在本外围类内可见 ,且在static方法内部也必须以"A.B"的形式访问,在非static方法
内部可以直接以"B"的形式访问
2.功能2: 内部类的对象时刻与外部类对象联系在一起,并且内部类
还拥有对外部类的所有元素的访问权.
a:内部类拥有对外部类的所有成员的访问权,是如何做到的?
首先考虑一个问题: 在外部类的如何定义一个内部类对象?
在拥有外部类对象之前是不可能创建内部类对象的(静态内部
类)除外.
内部对象创建有两种方式(前提是内部类在创建内部类对象处可见)
正确代码:
1: A a = new A() ;
A.B b = a.new B() ;
2: A a = new A() ;
A.B b = a.createB();
//createB是a内的一个方法,
//public B createB(){return new B() ;}
错误代码:
A.B b = new A.B() ;
理解上述创建的内部类对象的方法,应该大家能够想到,内部类的对象
时离不开外部类对象的,时刻与外部类联系在一起. 当我们创建一个内
部类对象时,此时内部类必定会秘密地捕获一个指向那个外围类对象的
引用.然后当你访问外围类成员时,就是用那个引用来选择外围类的成员.
至于如何捕获的,这个就是java语言规定的.
1.功能1: 代码的隐藏和组织机制.
内部类的可见性: 由在定义内部类时的访问控制权限决定(前提是外围类是public的)
public : 在任何其他类中都可见,前提是要用"外部类名.内部类名"的方式
例:public class A{
public class B{}
访问时要以 "A.B"的形式访问
protected 和 没有访问修饰符: 在本包内可以访问, 访问形式也是"A.B"
private : 只在本外围类内可见 ,且在static方法内部也必须以"A.B"的形式访问,在非static方法
内部可以直接以"B"的形式访问
2.功能2: 内部类的对象时刻与外部类对象联系在一起,并且内部类
还拥有对外部类的所有元素的访问权.
a:内部类拥有对外部类的所有成员的访问权,是如何做到的?
首先考虑一个问题: 在外部类的如何定义一个内部类对象?
在拥有外部类对象之前是不可能创建内部类对象的(静态内部
类)除外.
内部对象创建有两种方式(前提是内部类在创建内部类对象处可见)
正确代码:
1: A a = new A() ;
A.B b = a.new B() ;
2: A a = new A() ;
A.B b = a.createB();
//createB是a内的一个方法,
//public B createB(){return new B() ;}
错误代码:
A.B b = new A.B() ;
理解上述创建的内部类对象的方法,应该大家能够想到,内部类的对象
时离不开外部类对象的,时刻与外部类联系在一起. 当我们创建一个内
部类对象时,此时内部类必定会秘密地捕获一个指向那个外围类对象的
引用.然后当你访问外围类成员时,就是用那个引用来选择外围类的成员.
至于如何捕获的,这个就是java语言规定的.