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);
}
}
- Java内部类的概念
- Java内部类的概念
- 【内部类】内部类的概念及成员内部类
- JAVA内部类概念简介
- 内部类与匿名内部类的概念与使用————Java基础知识
- 关于Java中内部类的一些概念整理
- java的内部类、匿名内部类、局部内部类
- 【Java概念】内部类(12)
- java的内部类
- Java的内部类
- java的内部类
- Java的内部类
- java的内部类
- java的内部类
- JAVA的内部类
- Java的内部类
- java的内部类
- java的内部类
- 2017 多校4 1009 Questionnaire
- POJ
- POI: 导入数字时,在获取cell时已经损失精度问题
- E
- 手摸手教你搭建vue-cli脚手架-详细步骤图文解析[vue入门]
- Java内部类的概念
- Arbitrage
- 【c#】C#调用matlab动态链接库
- 2017多校4 1011 Time To Get Up
- HDUOJ Let the Balloon Rise
- 解决浏览器会产生缓存的问题
- POJ 2513 Colored Sticks 好题 字典树+并查集+欧拉路
- 线程分组 | 守护线程 | 线程优先级
- Arrays静态方法