java内部类匿名类浅析

  java中有两种类的实现方式,可以有效地优化程序代码。一个称为内部类,一个称之为匿名类

  我们以关闭窗口为例子简单说明一下两者的区别。

(一)不使用内部类和匿名类

package Test;

import javax.swing.*;
import java.awt.event.*;

public class Test {
	public static void main(String[] args) {
		new MyFrame("MyFrame");
	}
}

class MyFrame extends JFrame {
	public MyFrame(String title) {
		super(title);
		setLayout(null);
		setBounds(100, 100, 400, 300);
		setVisible(true);
		this.addWindowListener(new MyWindowAdapter(this));
	}
}

class MyWindowAdapter extends WindowAdapter {
	MyFrame myFrame = null;
	public MyWindowAdapter(MyFrame myFrame) {
		this.myFrame = myFrame;
	}
	public void windowClosing(WindowEvent e) {
		myFrame.setVisible(false);
		System.exit(0);
	}
}

  可以看出,这样的定义是比较麻烦的。首先,要声明一个类,名字是MyWindowAdapter;其次,在外部的MyWindowAdapter类中还必须要加上MyFrame这个成员变量。这样做的结果不仅麻烦,而且很容易导致有其他的类与该类重名,出错几率极大。



(二)使用内部类

package Test;

import javax.swing.*;
import java.awt.event.*;

public class Test {
	public static void main(String[] args) {
		new MyFrame("MyFrame");
	}
}

class MyFrame extends JFrame {
	public MyFrame(String title) {
		super(title);
		setLayout(null);
		setBounds(100, 100, 400, 300);
		setVisible(true);
		this.addWindowListener(new MyWindowAdapter());
	}

	class MyWindowAdapter extends WindowAdapter {
		public void windowClosing(WindowEvent e) {
			setVisible(false);
			System.exit(0);
		}
	}
}

  可以看出,这一小段程序的代码要比上个程序要简单一些,我们不必定义MyFrame这个成员了。为了避免外部的其它类调用该类,还可以将MyWindowAdapter类声明为private类型。但是内部类还必须要声明一个类名MyWindowAdapter,我们很可能会误用它,这是我们不想看到的。



(三)使用匿名类

package Test;

import javax.swing.*;
import java.awt.event.*;

public class Test {
	public static void main(String[] args) {
		new MyFrame("MyFrame");
	}
}

class MyFrame extends JFrame {
	public MyFrame(String title) {
		super(title);
		setLayout(null);
		setBounds(100, 100, 400, 300);
		setVisible(true);
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				setVisible(false);
				System.exit(0);
			}
		});
	}
}


  可以看出,这段程序比前两段更为简洁,不必定义MyFrame,甚至不必定义MyWindowAdapter!我们不用担心外部的类访问该匿名类,而且没有失去程序的可读性。


(四)总结
1. 内部类和匿名类相比外部类,可以有效地优化程序。
2. 内部类和匿名类不能写得太长,否则将失去程序的可读性。
3. 内部类和匿名类可以访问包装类(外嵌类)的成员变量和方法。
4. 匿名类一定是内部类,它一定跟在new后面,没有类名。
5. 匿名类中没有构造方法,不可以声明static成员变量和static方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值