JAVA面向对象之内部类

内部类

在一个类的内部声明的类,称为内部类(也叫内嵌类)。内部类只能在包含它的类中使用,同时它可以看作是该包含类的一段特殊代码,可以直接使用该包含类的变量和方法。
内部类编译后也会形成一个单独的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编程中,我们会经常用到内部匿名类。

上一篇:分析Java的类加载器与ClassLoader(二):classpath与查找类字节码的顺序,分析ExtClassLoader与AppClassLoader的源码


下一篇:Android自动化打包——Jenkins自动化打包工具(Mac平台)