[size=x-large][b]内部类概念[/b][/size]
所谓内部类(inner class),顾名思义,就是将一个类定义在定义在另一个类的内部。内部的类称之为内部类
public class outer{
class inner{
//
}
}
[b]特点[/b]
[list]
[*]内部类可以很好的实现隐藏,可以使用protected、private修饰符。
[*]内部类可以直接访问外部类的所有成员,包括私有的成员。
[*]外部类不能直接访问内部类的成员,必须首先建立内部类的对象才可以访问。
[*]内部类可以解决一些问题,比如间接地实现多继承。可以避免修改接口而实现同一个类中两个同名方法的调用。
[/list]
MethodInnerClassDemo
abstract class B {
abstract void method();
}
interface C{
void method();
}
class A extends B implements C{
@Override
public void method() {
System.out.println("method");
}
private class CClass implements C{
@Override
public void method() {
System.out.println("method interface");
}
}
public void metho2(){
new CClass().method();
}
}
[b]成员内部类及应用[/b]
[b]特点:[/b]
[list]
[*]成员内部类属于外部类的实例成员。相当于成员变量或方法。可以用public private protected default来修饰。在成员内部类中访问外部类的成员方法和属性,要使用“外部类名.this.成员方法”和“外部类名.this.属性”的形式。
[*]创建成员内部类的实例使用“外部类名.内部类名 实例名 = 外部类实例名.new 内部类构造方法(参数)”的形式。
[/list]
[b]限制:[/b]
[list]
[*]成员内部类不能与外部类重名。
[*]不能在成员内部类中定义static属性、方法和类(static final 形式的常量定义除外)。因为一个成员内部类实例必然与一个外部类实例关联,static成员完全可以移动其3外部类中去。
[/list]
[b]静态内部类及应用[/b]
[b]特点:[/b]
[list]
[*]使用static修饰的成员内部类叫静态内部类。
[*]静态内部类跟外部类没有任何关系,只是在生成类名和类定义时有影响。静态内部类可以看作与外部类平级的类。使用方式与外部类平级的类完全相同。
[*]创建静态内部类的实例使用 外部类名.内部类名 实例名 = new外部类名.内部类名(参数)。
[/list]
[b]限制:[/b]
[list]
[*]静态内部类不能与外部类重名。
[*]静态内部类不嫩访问外部类的非静态属性和方法。外部类不能访问内部类的非静态属性和方法。
[/list]
[b]匿名内部类及应用[/b]
[b]特点:[/b]
[list]
[*]匿名内部类是没有名称的内部类,没有办法引用它们。必须在创建的时候,作为new语句的一部分来声明并创建它们的实例。
[*]匿名内部类必须继承一个类(抽象的、非抽象的都可以)或者实现一个接口。如果父类(或者父接口)是抽象类,则匿名内部类必须实现其所有抽象方法。
[*]new interface/superclass(){//类体},这种形式的new语句声明一个新的匿名类,它对一个给定的类进行拓展,或者实现一个给定的接口,并同时创建该匿名类的一个新实例。
[/list]
[b]局部内部类及应用[/b]
[b]特点:[/b]
[list]
[*]定义在代码块{}、方法体中的类叫局部内部类。
[*]局部内部类访问外部类的属性和方法使用“外部类名.this.属性名”和“外部类名.this.方法名(参数)”的形式。
[*]对外部世界完全隐藏,只能在其作用域内生成对象。
[/list]
[b]限制:[/b]
[list]
[*]局部类不能加访问修饰符,因为它们不是类成员。
[*]局部内部类不能跟外部类重名。
[*]局部内部类访问作用域内的局部变量,该局部变量需要使用final修饰。
[/list]
[url=http://git.oschina.net/liyghting/codes/b25wmjrac6uexqn98vpi040]内部类使用[/url]
[url=https://git.oschina.net/liyghting/codes/k2egaov39z84rpy5jf7i010]不修改父类和接口的方法来分别调用同名的方法[/url]
[url=https://git.oschina.net/liyghting/codes/dz49m3wh1crfb5i8t6pen12]间接实现多继承[/url]
[url=https://git.oschina.net/liyghting/codes/c48f0kmh2tdz3uy6jvxp520]静态内部类使用[/url]