黑马程序员--------内部类和外部类
2013-07-26 10:10
302 查看
(一) 内部类(InnerClass)和内部类
类可以有两种重要成员:成员变量和方法,还可以有一种成员:内部类。内部类是在一个类的内部嵌套定义的类,它可以是其它类的成员,也可以在一个语句块的内部定义,还可以在表达式内部匿名定义。内部类有如下特性:
◇ 一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称。名字不能与包含它的类名相同。
◇ 可以使用包含它的类的静态和实例成员变量,也可以使用它所在方法的局部变量。
◇ 可以定义为abstract。
◇ 可以声明为private或protected。
◇ 若被声明为static,就变成了顶层类,不能再使用局部变量。
◇ 若想在inner class中声明任何static成员,则该inner class必须声明为static。。
1. 内部类使用
例3-8 是一个说明内部类如何使用的例子,其中,定义了两个内部类:MouseMotionHandler和MouseEventHandler,分别用来处理鼠标移动事件和鼠标点按事件。【例3-8】
import java.awt.*;
import java.awt.event.*;
public class TwoListenInner {
private Frame f;
private TextField tf;
public static void main(String args[]) {
TwoListenInner that=new TwoListenInner();
that.go();
}
public void go() {
f=new Frame("Two listeners example");
f.add("North",new Label("Click and drag the mouse"));
tf=new TextField(30);
f.add("South",tf);
f.addMouseMotionListener(new MouseMotionHandler());
f.addMouseListener(new MouseEventHandler());
f.setSize(300,300);
f.setVisible(true);
}
public class MouseMotionHandler extends MouseMotionAdapter {
public void mouseDragged(MouseEvent e){
String s="Mouse dragging:X="+e.getX()+"Y="+e.getY();
tf.setText(s);
}
}
public class MouseEventHandler extends MouseAdapter {
public void mouseEntered(MouseEvent e){
String s="The mouse entered";
tf.setText(s);
}
public void mouseExited(MouseEvent e){
String s="The mouse left the building";
tf.setText(s);
}
}
}
运行这个程序,可以看到它的运行结果。当将鼠标移入frame时,文本框中会出现:"The mouse entered";当在frame中拖曳鼠标时,文本框中会出现:"Mouse dragging:X=64 Y=117";当鼠标离开文本框时,文本框中出现:"The mouse left the building"。
2. 匿名类的使用
匿名类是一种特殊的内部类,它是在一个表达式内部包含一个完整的类定义。通过对上例中go()部分语句的修改,我们可以看到匿名类的使用情况。public void go() {
f=new Frame("Two listeners example");
f.add("North",new Label("Click and drag the mouse"));
tf=new TextField(30);
f.add("South",tf);
f.addMouseMotionListener(new MouseMotionHandler(){
/*定义了一个匿名类,类名没有显式地给出,只是该类是
MouseMotionHandler类的子类*/
public void mouseDragged(MouseEvent e){
String s="Mouse dragging:X="+e.getX()+"Y="+e.getY();
tf.setText(s);
}
});
f.addMouseListener(new MouseEventHandler());
f.setSize(300,300);
f.setVisible(true);
}
内部类的优缺点:
1.优点:
java中的内部类和接口加在一起,可以实现多继承。
可以使某些编码根简洁。
隐藏你不想让别人知道的操作。
节省编译后产生的字节码文件的大小
2. 缺点:
使程序结构不清楚
相关文章推荐
- 黑马程序员_关于内部类和外部类的调用关系
- 黑马程序员——分析匿名内部类使用外部定义的对象
- 黑马程序员---Java匿名内部类使用
- 黑马程序员 非静态情况下内部类调用规则
- 黑马程序员——基础知识——匿名内部类
- java 通过外部类的实例创建内部类的实例
- 黑马程序员——(五)内部类
- java匿名内部类使用外部变量时,外部变量必须是final,为什么?
- (3)传统线程互斥技术 synchronized 经典解析。【线程同步】 外加【内部类与外部类 】
- 黑马程序员-内部类好异常
- 黑马程序员_学习笔记第9天——内部类、异常
- 黑马程序员——内部类
- 黑马程序员-Java学习04-接口,多态,内部类,匿名内部类,Object类
- * 编写一个内部类,外部类为药品类,内部类为药架类,包括一个放置药品的方法,要求: * 1.外部其他类不能直接访问内部类 * 2.但外部其他类可以访问内部类的放置药品方法
- 黑马程序员_内部类
- 内部类外部类之间的互访
- 黑马程序员Java笔记——抽象类、接口、内部类(拾遗补录)
- 内部类的方法(外部调用内部类的方法)
- 黑马程序员——Java基础--内部类
- 黑马程序员_07. 包和访问权限及内部类和匿名内部类