java基础——内部类

来源:互联网 发布:js 7.62mm狙击步枪 编辑:程序博客网 时间:2024/04/30 06:09

一、内部类

1.使用时机

  • 通常,在一个类中只被它的外部类所使用的时候,才将它定义为内部类。将相互依赖的类结合到一个主类中,减少源文件的数量。
  • 可以避免类名冲突。一个处理器类被设计为针对以恶搞GUI组件创建一个处理器对象。处理器对象不会被其他应用所共享嘛所以将它定义在主类里面作为一个内部类使用。

2.特征

  • 一个内部类可以引用定义在它所在外部类中的数据和方法。
  • 一个内部类可以定义为static。一个static的内部类可以使用外部类的名字所访问。一个static的内部类不能访问外部类中非静态成员。
  • 内部类对象通常在外部类中所创建。如果内部类是非静态的,则必须创建一个外部类的实例,然后使用以下语法来创建一个内部类对象。
OuterClass.InnerClass innerObject = OuterClass .new InnerClass();
如果内部类是静态的,使用以下语法来创建一个内部类对象:
OuterClass.InnerClass innerObject = new OuterClass.InnerClass();

二、匿名内部类

1.使用时机

一个匿名内部类是一个没有名字的内部类。内部类处理器可以使用匿名内部类进行代码简化。

2.特征

  • 一个匿名内部类必须总是从一个父类继承或者实现一个接口,但不能是显式的extends后者implements子句。
  • 一个匿名内部类必须实现父类或者接口的所有抽象方法。
  • 一个匿名内部类总是使用它父类的无参构造方法来创建一个实例。如果一个匿名内部类实现一个接口,构造方法是Object();

三、代码实例

import javafx.application.Application;import javafx.event.ActionEvent;import javafx.event.EventHandler;import javafx.geometry.Pos;import javafx.scene.Scene;import javafx.scene.control.Button;import javafx.scene.layout.HBox;import javafx.stage.Stage;public class AnnoymousHandlerDemo extends Application{public static void main(String[] args) {launch(args);}@Overridepublic void start(Stage primaryStage) throws Exception {//Hold buttons in an HBoxHBox hBox = new HBox();hBox.setSpacing(10);hBox.setAlignment(Pos.CENTER);Button btNew = new Button("New");Button btOpen = new Button("Open");Button btSave = new Button("Save");Button btPrint = new Button("Print");hBox.getChildren().addAll(btNew, btOpen, btSave, btPrint);//Create and register the handlerbtNew.setOnAction(new EventHandler<ActionEvent>() {@Overridepublic void handle(ActionEvent arg0) {System.out.println("Process New");}});btOpen.setOnAction(new EventHandler<ActionEvent>() {@Overridepublic void handle(ActionEvent arg0) {System.out.println("Process Open");}});btSave.setOnAction(new EventHandler<ActionEvent>() {@Overridepublic void handle(ActionEvent arg0) {System.out.println("Process Save");}});btPrint.setOnAction(new EventHandler<ActionEvent>() {@Overridepublic void handle(ActionEvent arg0) {System.out.println("Process Print");}});Scene scene = new Scene(hBox, 300, 50);primaryStage.setTitle("AnnoymousHandlerDemo");primaryStage.setScene(scene);primaryStage.show();}}




0 0