Java内部类的概念

来源:互联网 发布:英雄美工钢笔9076 编辑:程序博客网 时间:2024/06/10 03:21

什么是内部类

内部类(Inner Classes)的概念是在 JDK1.1 版本中开始引入的。在 Java 中,允许在一个类(或方法、语句块)的内部定义另一个类,称为内部类,有时也称为嵌套类(Nested Classes)。内部类和外层封装它的类之间存在逻辑上的所属关系,一般只用在定义它的类或语句块之内,实现一些没有通用意义的功能逻辑,在外部引用它时必须给出完整的名称。 引入内部类的好处在于可使源代码更加清晰并减少类的命名冲突,就好比工厂制定内部通用的产品或工艺标准,可以取任何名称而不必担心和外界的标准同名,因为其使用范围不同。内部类是一个有用的特征,因为它们允许将逻辑上同属性的类组合到一起,并在另一个类中控制一个类的可视性。

下述例子表示使用内部类的共同方法:
class MyFrame extends Frame {
Button myButton;
TextArea myTextArea;
int count;
public MyFrame(String title) {
super(title);
myButton = new Button(“click me”);
myTextArea = new TextArea();
add(myButton, BorderLayout.CENTER);
add(myTextArea, BorderLayout.NORTH);
ButtonListener bList = new ButtonListener();
myButton.addActionListener(bList);
}
class ButtonListener implements ActionListener{ // 这里定义了一个内部类
public void actionPerformed(ActionEvent e) {
count++;
myTextArea.setText(“button clicked ” + count + ” times”);
}
} // end of innerclass ButtonListener
public static void main(String args[]) {
MyFrame f = new MyFrame(“Inner Class Frame”);
f.setSize(300, 300);
f.setVisible(true);
}
}
前面的例子包含一个类 MyFrame,它包括一个内部类 ButtonListener。编译器生成两个类文件,MyFrame$ButtonListener.class 以及 MyFrame.class。

内部类特点

(1)嵌套类(内部类)可以体现逻辑上的从属关系。同时对于其他类可以控制内部类对外不可见等。
(2)外部类的成员变量作用域是整个外部类,包括嵌套类。但外部类不能访问嵌套类的private 成员
(3)逻辑上相关的类可以在一起,可以有效的实现信息隐藏。
(4)内部类可以直接访问外部类的成员。可以用此实现多继承!
(5)编译后,内部类也被编译为单独的类,不过名称为 outclass$inclass 的形式。

再来个例子:
public class Outer {
private int size;
public class Inner {
private int counter = 10;
public void doStuff() {
size++;
}
}
public static void main(String args[]) {
Outer outer = new Outer();
Inner inner = outer.new Inner();
inner.doStuff();
System.out.println(outer.size);
System.out.println(inner.counter);
// 编译错误,外部类不能访问内部类的private 变量
System.out.println(counter);
}
}