JAVA自学课程笔记10

20213141721分
JAVA自学课程笔记10:
	
	可输入的加法计算文本框1TestTextField.java:
			/*版本1的main函数过长,不美观*/
			import java.awt.*;
			import java.awt.event.*;

			public class TestTextField{
				public static void main(String[] args){
					TextField tf1 = new TextField(30);
					TextField tf2 = new TextField(30);
					TextField tf3 = new TextField(30);
					
					Button bn = new Button("=");
					Label lb = new Label("+");
					Frame f = new Frame("文本框相加示例");
					f.setLayout(new FlowLayout());
					f.add(tf1);
					f.add(lb);
					f.add(tf2);
					f.add(bn);
					f.add(tf3);

					MyMonitor aa = new MyMonitor();
					bn.addActionListener(aa);

					f.pack();
					f.setVisible(true);
				}
			}

			class MyMonitor implements ActionListener{
				@Override
				public void actionPerformed(ActionEvent e){
					String str1 = TestTextField.tf1.getText();
					String str2 = TestTextField.tf2.getText();
					int num1 = Integer.parseInt(str1);
					int num2 = Integer.parseInt(str2);
					int num3 = num1 + num2;

					String str3 = String.valueOf(num3);
					TestTextField.tf3.setText(str3);
				}
			}
	
	可输入的加法计算文本框2TestTextField.java:
			/*对1程序美化修正且添加了关闭程序的功能*/
			import java.awt.*;
			import java.awt.event.*;

			public class TestTextField{
				public static void main(String[] args){
					new newTextField().launch();
				}
			}

			class newTextField{
				public TextField tf1, tf2, tf3;

				public void launch(){
					tf1 = new TextField(30);
					tf2 = new TextField(30);
					tf3 = new TextField(30);
					
					Button bn = new Button("=");
					Label lb = new Label("+");
					Frame f = new Frame("文本框相加示例");
					f.setLayout(new FlowLayout());
					f.add(tf1);
					f.add(lb);
					f.add(tf2);
					f.add(bn);
					f.add(tf3);

					
					bn.addActionListener(new MyMonitor(this));
					f.addWindowListener(new MyMonitor(this));

					f.pack();
					f.setVisible(true);
				}
			}

			class MyMonitor extends WindowAdapter implements ActionListener{
				private newTextField tf;	//通过在B类中定义A类的属性,就可以达到在B类中访问A类成员的目的
				public MyMonitor(newTextField tf){
					this.tf = tf;
				}

				@Override
				public void actionPerformed(ActionEvent e){
					String str1 = tf.tf1.getText();
					String str2 = tf.tf2.getText();
					int num1 = Integer.parseInt(str1);
					int num2 = Integer.parseInt(str2);
					int num3 = num1 + num2;

					String str3 = String.valueOf(num3);
					tf.tf3.setText(str3);
				}

				@Override
				public void windowClosing(WindowEvent e){
					System.exit(-1);
				}
			}

	内部类:
		内部类的方法可以访问外部类的所有成员。
		内部类可以直接当作外部类的成员。
		外部类的方法不可以直接访问内部类的成员。

		优点:
			可以让一个类方便的访问另一个类的所有成员。
			增加程序安全性,有效避免其他不相关外部类对该类的访问。
		例如,上面的计算文本框程序中的一个MyMonitor类可以作为newTextField的内部类,同时nexTextField的“new MyMonitor(this)”语句中的this可以不要。

	匿名类:
		较不规范,没有逻辑性。
		匿名类是一种特殊的内部类。
		
		Test:
			import java.awt.*;
			import java.awt.event.*;

			public class Test{
				public static void main(String[] args){
					Frame f = new Frame();
					f.setSize(300, 300);
					
					f.addWindowListener(
						new WindowAdapter(){
							@Override
							public void windowClosing(WindowEvent e){
								System.exit(-1);
							}
						}
					);
					
					f.setVisible(true);
				}
			}

		如果在一个方法内定义了一个匿名类,则该匿名类可以访问外部类的所有成员、包裹该匿名类的方法中的所有final类型局部变量。(非final类型的局部变量无法被匿名类访问。)
			Test:
			import java.awt.*;
			import java.awt.event.*;

			public class Test{
				public static void main(String[] args){
					final Frame f = new Frame();	//如果去掉final编译会报错
					f.setSize(300, 300);
					
					f.addWindowListener(
						new WindowAdapter(){
							@Override
							public void windowClosing(WindowEvent e){
								f.setVisible(false);	//匿名类只能调final类型局部变量
							}
						}
					);
					
					f.setVisible(true);
				}
			}


		实现接口:
			//其中A是接口。
			new A(){
				//实现接口方法的代码
			}//功能:生成一个实现了A接口的匿名类的对象。

		实现抽象类:
			//其中A是抽象类。
			new A(){
				//实现A中所有抽象方法的代码
				//也可以添加自己的方法或属性代码
			}
			//功能:生成一个匿名类对象,该匿名类必须得实现A类的所有抽象方法,当然该匿名类也可以定义自己的属性和方法。

		继承父类:
			//其中A是类名。
			new A(){
				//重写了A类的方法代码
				//也可以添加自己的方法或属性代码
			}
			//功能:生成一个A类的子类对象,该匿名类继承了A的所有非private成员。

		如果一个类包含了很重要的逻辑,将来要经常修改,则这个类就不应当做匿名类来使用,匿名类会造成代码的混乱。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值