成员内部类:指的是定义在外部类成员位置的内部类;
局部内部类:定义在外部类成员方法里面的内部类;
下面来看这个例子:
package org.westos.demo5;
public class MyTest {
public static void main(String[] args) {
Outer.Inner inner = new Outer().new Inner();//创建成员内部类的对象;
inner.innershow();//调用成员内部类的innnershow成员方法
System.out.println("-----------------------------------------");
Outer outer = new Outer();//创建外部类对象;
outer.show();//调用外部类成员show方法,即可完成创建局部内部类对象;
}
}
class Outer{
String s;//成员位置:指的是成员变量,构造代码块,成员方法,构造方法等等位置;
int aa=3;
private int bb=438;
public void outershow(){
System.out.println("外部类的成员方法");
PrivateInner privateInner = new PrivateInner();
privateInner.PrivateShow();
}
//内部类,可以用private修饰,修饰之后,那么外界,就不能创建内部类的对象,但是外部类之内可以创建内部类对象;
private class PrivateInner{
int a=100;
public void PrivateShow(){
System.out.println("私有内部类的show方法");
}
}
class Inner{//定义在成员位置的成员内部类;
int num1=10;
public void innershow(){
System.out.println("成员内部类的成员方法innershow");
System.out.println(this.num1);//打印成员内部类,也就是本类的成员变量;
System.out.println(Outer.this.aa);//调用并打印外部类成员变量值;
outershow();
System.out.println(aa);//内部类可以访问外部类的所有成员变量和方法,包括私有的;
System.out.println(bb);
}
}
public void show(){//外部类的成员方法;
final int num3=520;//当局部内部类调用局部变量时,局部变量必须是常量;
class inner2{ //定义在成员方法内的局部内部类;
int num2=20;
public void innershow2(){
System.out.println("局部内部类的成员方法innershow2");
System.out.println(this.num2);//调用并打印局部内部类,也就是本类的成员变量;
System.out.println(num3);//调用并打印局部方法中的局部变量;
System.out.println(aa);//调用并打印外部类的成员变量
}
}
inner2 inner2 = new inner2();//创建局部内部类的对象;
inner2.innershow2();//调用局部内部类的成员innershow2()方法;
}
}
通过创建以上实例,我们可以看出创建成员内部类对象,可以直接通过 : 外**部类名.内部类名 对象名= new 外部类名().new 内部类名()**来创建{ Outer.Inner inner = new Outer().new Inner() };但是局部内部类对象的创建需要在局部方法之内创建,并在main函数里面调用这个局部方法,以达到创建对象的目的;