1.成员内部类;
(1)成员内部类可以访问外部类的所有成员。
(2)若内部类中存在与外部类同名的变量,则访问时遵循就近原则;
此时若想强行访问外部类的变量,可以使用:
“外部类名.this.变量名”进行访问,在此之前若有赋值操作
则会得到赋值后的变量;但若使用:
“new 外部类名().变量名”进行访问,得到的则是该变量本身。
(3)在外部类中创建内部类对象的格式为:
内部类名 对象名 = new 内部类名();
在其他类中创建内部类对象的格式为:
外部类名.内部类名 对象名 = new 外部类名().new内部类名();
2.静态内部类;
(1)静态内部类可以直接访问外部类的静态成员,创外部类对象访问其他成员;
(2)可以在不创建外部类对象的情况下被实例化;
(3)无法在静态内部类的静态方法中访问外部类或内部类的非静态成员,强行要
访问可以先创建对象;
(4)在外部类中创建静态内部类对象的格式为:
内部类名 对象名 = new 内部类名();
在其他类中创建内部类对象的格式为:
外部类名.内部类名 对象名 = new 外部类名.内部类名();
3.方法内部类;
(1)可以访问外部类的成员
(2)所调用的局部变量必须用final修饰
(3)无法用static修饰;
(4)只能在当前方法中被使用。
4.匿名内部类;
(1)必须有父类或接口;
(2)其实质是父类的子类或接口的实现类的对象,即多态;
(3)格式是:
new 接口名或父类名() {
重写方法;
}; |
|