内部类
在一个类的内部声明的类,称为内部类(也叫内嵌类)。内部类只能在包含它的类中使用,同时它可以看作是该包含类的一段特殊代码,可以直接使用该包含类的变量和方法。
内部类编译后也会形成一个单独的class,但它附属于其包含类。创建内部类的对象时会有一个对外部类对象的引用,所以一般只能在非静态方法里创建内部类对象。
创建一个外部类Outer,在其非静态方法中调用内部类。
public class Outer {
int outer = 100;
//在外部类的方法中创建内部类的对象,并调用其方法
void test() {
Inner in = new Inner();
in.dispaly();
}
//内部类
public class Inner {
void dispaly() {
System.out.println("dispaly:outer =" + outer);
}
}
}
从上面代码中可以看出,可以把一个类定义在另一个类中,这就是内部类。一般来说使用内部类有如下两点考虑:
1. 内部类使得程序代码更为紧凑,程序更具模块化。
2. 由于内部类被看作类中一段特殊的代码,其可以直接调用类中的成员,因此在一些复杂的调用关系中,使用内部类可以使成员间调用更加方便。
内部匿名类
匿名类就是没有名字的类,是将类和类的方法定义在一个表达式范围里。在内部类仅需要使用一次的时候,可以对代码进行简化,比如在《JAVA面向对象之抽象类和接口》中,我们定义了一个GraphicsCard接口,并且定义了一个AMDGraphicsCard 实现了该接口,如果我们要完成AMDGraphicsCard类所完成的功能且只需要用一次,那么我们就可以使用内部匿名类。这里我们定义一个Computer类来演示内部匿名类的使用。
public class Computer {
public void show(GraphicsCard card) {
card.dispaly();
}
public static void main(String[] args) {
Computer computer = new Computer();
//使用内部匿名类
computer.show(new GraphicsCard() {
public void dispaly() {
System.out.println("AMD显卡");
}
});
}
}
以上就是内部匿名类的使用方式,在GUI编程中,我们会经常用到内部匿名类。