黑马程序员_内部类
将 一个类,定义在另一类的内部。
1,、内部类,可以访问外部类的私有成员
2、内部类可以被私有修饰,不为同一个包中的其他类访问。
3、外部类访问内部类,必须要创建 内部类的对象。
4、内部类可以声明为抽象的,被其他内部类继承
5、内部类可以使用final修饰符, abstract 和final 不能同时使用。
6、内部类可以声明为private 和protected
内部类 不能独立存在,所以在创建 内部类时,必须进行标识这个内部类是属于哪个外部类。
之所以可以直接访问外部类中的成员,是因为内部类中持有外部类的引用,格式 外部类.this
------------------
当内部类 定义在外部类的成员位置上时,且 非私有,可以再外部其他类中创建对象。
外部类名.内部类名 对象名 = new 外部类名.new 内部类名();
Outer . Inner i = new Outer() .new Inner();
-------------------
静态内部类
如果内部类是静态的
外部类名.内部类名 对象名 = new 外部类构造方法 . 内部类构造方法;
Outer .Inner i = new Outer.Inner();
如果内部类是静态的,这个类只能访问外部类的静态成员。出现了 访问局限性。
如果内部类的方法是静态的,这个内部类必须是静态的。
如果外部类的方法是静态的,访问内部类,内部类也必须是静态的;
---------------------
局部内部类
在 外部类的方法中定义一个类,,这个类只能在 这个方法体中使用,
如果这个类 要访问这个方法中的局部变量,这个局部变量需要定义为final。
---------------------
匿名内部类
1、匿名内部类的方法最好不要超过三个。
2、匿名内部类不可能定义为抽象的,因为系统在创建匿名内部类是,会立即创建匿名内部类的对象。
就是一个 没有名字的内部类。。这个类必须继承一个类,或者实现一个接口。
创建匿名内部类时会立即创建一个类的实例,这个类定义立即消失,匿名内部类不能重复使用。适合创建需要一次使用的类。
匿名内部类不能定义构造方法,因为匿名内部类没有类名,所以无法定义构造方法。 但是可以定义实例代码块,通过实例代码块来完成构造方法要完成的工作。
浙公网安备 33010602011771号