内部类可以访问外部类中的所有成员方法和成员变量。原因,由外部类.this来引用外部类的变量和方法。
内部类变量:index/this.index/Middle.this.index/Outer.this.index。
访问内部类:外部类提供一个方法,返回它的内部类。
Outer outer = new Outer();
Outer.Inner inner = outer.getInnter();
Outer.Inner inner = outer.new Innter(); 建立内部类与外部类的关系。
能否直接访问内部类,看它是否可见,不可见(在外部类的外边)就通过外部类引用,如果可见(在外部类的内部,和内部类在同一层),就直接引用,例如在外部类里引用。
静态中不能有非静态,包括main。因为static是在类被加载的时候就存在,而非static是实例化一个对象时才存在的。
当把类写到一个方法的内部时,那么这个类的范围只能在这个方法内部去使用。
内部类可以放到:函数中,条件语句中,语句块中。不管欠套有多深,都可以随意访问外部类的成员。
当:把内部类定义在了一个方法当中,如果要在内部类中访问该方法的参数,或者访问该方法中的变量时,该变量必须为final的。为什么呢?
内部类:不只是public,default了,可把它的修饰比照方法的访问范围。
内部类也可以定义为抽象类。
静态的内部类只能访问外部类的静态成员变量和成员方法。
静态内部类:能够有静态的声明。
非静态内部类:不能够有静态的声明。为什么?解释:非静态的内部类说明需要实例化后才能用,而内部类中的变量却是静态的,即加载类的时候加载,之间矛盾。
只有顶层类或static的内部类中才可以声明static成员。
如果外部类要访问内部类的成员,要先实例化一个内部类的对象,通过对象去访问内部类的成员。
---------------------------------------------------------------------------
extends Car.PlaneWheel
PlaneWheel(Car car)
{
car.super();
}
Car car = new Car();
PlaneWheel pw = new PlaneWheel(car);
要创建一个内部类的对象,先要创建一个外部类的对象,并且建立之间的关系。
内部类应用之实现接口:
用内部类去实现一个接口,再在外部类中创建一个方法返回这个接口,供其它类使用。
匿名的内部类应用:返回抽象类的时候使用内部类:匿名的内部类。
return Animal()
{
public void eat() {}
//实现方法。
};
没有名字。
----------------------------------------------------------------------------
什么时候使用内部类以及原因
:
内部类可以随意访问其外部类。
内部类可以用于创建适配器类,适配器类是用于实现接口的类。帮助更好理解代码。内部类在线程中的应用。
内部类更多用法:
内部类实现接口,并将内部类定义为private,这样可以隐藏实现细节。让用户只能通过接口去访问。
内部类应用:当一个类继承了一个类并且实现了一个接口,但是实现的接口中的方法和继承的类中的方法同名,为了避免,使用内部类去实现这个接口。
接口与内部类的使用。
----------------------------------------------------------------------------
通过内部类实现多继承:
class A
{
void fn1()
{
}
}
abstract class B
{
abstract void fn2();
}
class C extends A
{
B getB()
{
return new B()
{
public void fn2()
{
}
};
}
}
-----------------------------------------------------------------------------
异常处理:
Throwable--->Error类,Exception类可处理。下载本文