JAva内部クラスの使用とインスタンス

2341 ワード

内部クラス
内部クラスもネストクラス(inner class)となり、JDK 1.1がJDK 1.0と区別される最も重要な新しい特性である.内部クラスは、ブロック内で単独で定義してもよいし、文内で匿名で定義してもよい(名前を隠すクラス).
内部クラスのプロパティには、次の説明があります.
1.        クラス名は定義された範囲内でのみ使用でき、外部クラスと区別されます.
2.        内部クラスは、外部クラスのクラス変数とインスタンス変数を使用するか、外部クラスのローカル変数を使用することができます.
3.        内部クラスはabstractタイプとして宣言できます.
4.        内部クラスはインタフェースであってもよく、このインタフェースは別の内部クラスによって実現されなければならない.
5.        内部クラスはprivateとprotectedとして定義することができ、publicタイプとして定義することはできず、保護された内部クラスは外部クラス定義の変数を同様に使用することができる.
6.        クラスはstaticによって修飾され、このとき修飾されたクラスは自動的に最上位クラスに変換され、最上位クラスとして定義されたクラスは他の内部クラスと局所範囲で定義されたデータと変数を使用できない.
7.        内部クラスはstatic型メンバーを定義できません.最上位クラスだけがstaticメンバーを定義できます.内部クラスがstatic型メンバーを使用する必要がある場合は、このメンバーは外部クラスで定義する必要があります.
匿名クラス
クラス全体の記述を式に配置します.すなわち、匿名クラスを定義しながらオブジェクトを作成します.
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;

/**
 *           
 * @author lily
data:20130325
 *
 */
public class Practice {
	private static Frame frame;
	private TextField fTextField;
	public  static void main(String argsString[]){
		Practice practice=new Practice();
		practice.go();
		}
	
	public void go() {
		frame=new JFrame("       ");
		frame.add("North",new Label("    "));
		fTextField=new TextField(30);
		frame.add("South",fTextField);
		//       
		frame.addMouseMotionListener(new MouseMotionListener() {
			public void mouseMoved(MouseEvent e) {
				// TODO Auto-generated method stub
			}
			public void mouseDragged(MouseEvent event) {
				// TODO Auto-generated method stub
				String string="Mouse dragging :x="+event.getX()+"Y="+event.getY();
				fTextField.setText(string);
			}
		});
		//       
		frame.addMouseListener(new MouseEventHandler());
		frame.setSize(300,300);
		frame.setVisible(true);
	}
	//         MouseEventHandler
	public class MouseEventHandler extends MouseAdapter {
		public void mouseEntered(MouseEvent event) {
			String string="     !";
			fTextField.setText(string);
		}
		public void mouseExited(MouseEvent event) {
			String string="     !";
			fTextField.setText(string);
		}		
	}
	}