内部类:
即定义在类中的类;内部类相当于是外部类中的一个属性,内部类本身也就是一个类,跟正常的类一样。
在内部类使用时候的操作就和普通类一样,以下面代码为例,InnerClass为外部类,Run、Uu、Mm为内部类。
内部类的使用少不了对象的创建,由于Run是非静态类,所以直接new Run();创建内部类对象便于外部类创建对象的时候直接调用内部类中的方法: 对象.new Run();,即new InnerClass().new Run(); ,为方便使用,直接用一个变量替代 即InnerClass.Run msi = new InnerClass().new Run();,而后调用内部类中的方法则是直接用msi+"."+内部类中的方法名 调用。
public class InnerClass {
/**
*非静态内部类Run
*/
class Run{
/**
* 非静态方法
*/
void modFun() {
System.out.println("--Inner class--");
}
}
}
public static void main(String[] args) {
InnerClass.Run msi = new InnerClass().new Run();
msi.modFun();
}
Uu是静态类,所以直接new Uu();为内部类对象,方法和上述唯一的区别点在于Uu是静态的,外部类调用的时候可以把Uu看成是一个静态属性,直接由类名调用 InnerClass.Uu,之后再创建对象 new InnerClass.Uu();用于调用静态内部类中的非静态方法。给对象定义一个变量用于方便调用方法即InnerClass.Uu msg = new InnerClass.Uu();,而后直接对象msg+"."+方法(addMe()).
public class InnerClass {
/**
*静态内部类Uu
*/
static class Uu{
/*
* 非静态方法
*/
void addMe() {
System.out.println("++addMe++");
}
}
}
public static void main(String[] args) {
InnerClass.Uu msg = new InnerClass.Uu();
msg.addMe();
}
静态内部类Mm的描述大致和Uu一样,唯一的区别点在于Mm中的方法是静态方法,而Uu中的是非静态方法。静态方法调用直接用 内部类类名.方法,外部类调用内部类同Uu,直接类名调用,即 InnerClass.Mm.delete();
public class InnerClass {
/**
*静态内部类Mm
*/
static class Mm{
/*
* 静态方法
*/
static void delete() {
System.out.println("==delete==");
}
}
}
public static void main(String[] args) {
// new InnerClass.Mm(); 子类对象 为方便多次使用 可以用一个变量替代 即 InnerClass.Mm Tt = new InnerClass.Mm();
InnerClass.Mm.delete();
}
局部内部类:
即定义在方法中的类,生命周期和方法的生命周期一致,作用域只在方法中。
以下列代码为例参数局部内部类的调用。
public class AreaClass {
int count = 5;
public void addMe() {
class Uu{
int count = 6;
public void method1() {
int count = 7;
System.out.println("count = "+count);
}
public void method2() {
int count = 7;
System.out.println("count = "+this.count);
}
public void method3() {
int count = 7;
System.out.println("count = "+AreaClass.this.count);
}
}
Uu output = new Uu();
output.method1();
output.method2();
output.method3();
}
public static void main(String[] args) {
AreaClass area = new AreaClass();
area.addMe();
}
}
由于局部内部类Uu定义在方法中,外部类可以调用方法而不能调用方法中的局部内部类,所以下手自然就从方法中开始,直接在方法中创建Uu 的对象 new Uu(),在用output变量接收,直接利用output+"."+方法调用方法完成方法addMe();在通过外部类直接调用addMe()方法完成类的调用。
本次以函数输出count值来测试不同变量的调用,第一个输出:method1中count指当前变量 故count = 7;第二次输出:method2中count指局部内部类中的成员变量 故count = 6;第三次输出:method3中count指外部类中的成员变量 故count = 5;运行结果如下:
count = 7
count = 6
count = 5