JAVA学习笔记 day7
1.组合
在OOP编程种,组合优先级大于继承。
class A extends B{
//继承
}
class C {
public D d;
//组合
}
2.学了这么久JAVA,终于会写计算器了
package caculater;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
new Calculator();
}
}
//计算器类
class Calculator extends Frame{
public Calculator() {
//3个文本框
TextField field1 = new TextField("");
TextField field2 = new TextField("");
TextField field3 = new TextField("");
//一个按钮
Button button = new Button("=");
button.addActionListener(new MyActionListener(field1,field2,field3));
//一个标签
Label label = new Label("+");
//布局
setLayout(new FlowLayout());
add(field1);
add(label);
add(field2);
add(button);
add(field3);
setVisible(true);
pack();
}
}
//监听类
class MyActionListener implements ActionListener{
//获取三个变量
private TextField f1,f2,f3;
public MyActionListener(TextField f1,TextField f2,TextField f3) {
this.f1 = f1;
this.f2 = f2;
this.f3 = f3;
}
@Override
public void actionPerformed(ActionEvent e) {
//获得加数和被加数
int num1 = Integer.parseInt(f1.getText());
int num2 = Integer.parseInt(f2.getText());
//加法运算,放到第三个框
int num3 = num1 + num2;
f3.setText(""+num3) ;
//清楚前两个框
f1.setText("");
f2.setText("");
}
}
3.组合后的代码
package caculater;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Calculator c1 = new Calculator();
c1.loadFrame();
}
}
//计算器类
class Calculator extends Frame{
TextField field1,field2,field3;
public void loadFrame() {
//3个文本框 1标签 1按钮
field1 = new TextField("");
field2 = new TextField("");
field3 = new TextField("");
Label label = new Label("+");
Button button = new Button("=");
button.addActionListener(new MyActionListener(this));
//布局
setLayout(new FlowLayout());
add(field1);
add(label);
add(field2);
add(button);
add(field3);
setVisible(true);
pack();
}
}
//监听类
class MyActionListener implements ActionListener{
//获取三个变量
private Calculator calculator = null;
public MyActionListener(Calculator calculator) {
this.calculator = calculator;
}
@Override
public void actionPerformed(ActionEvent e) {
//获得加数和被加数
int num1 = Integer.parseInt(calculator.field1.getText());
int num2 = Integer.parseInt(calculator.field2.getText());
//加法运算,放到第三个框
int num3 = num1 + num2;
calculator.field3.setText(""+num3) ;
//清楚前两个框
calculator.field1.setText("");
calculator.field2.setText("");
}
}
真 · 面向对象
4.内部类
将监听类放入到计算器类里面,可以更好的包装。内部类的最大好处,就是可以畅通无阻的访问到外部的属性和方法。
package caculater;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Calculator c1 = new Calculator();
c1.loadFrame();
}
}
//计算器类
class Calculator extends Frame{
TextField field1,field2,field3;
public void loadFrame() {
//3个文本框 1标签 1按钮
field1 = new TextField("");
field2 = new TextField("");
field3 = new TextField("");
Label label = new Label("+");
Button button = new Button("=");
button.addActionListener(new MyActionListener());//重点理解
//布局
setLayout(new FlowLayout());
add(field1);
add(label);
add(field2);
add(button);
add(field3);
setVisible(true);
pack();
}
private class MyActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
//获得加数和被加数
int num1 = Integer.parseInt(field1.getText());
int num2 = Integer.parseInt(field2.getText());
//加法运算,放到第三个框
int num3 = num1 + num2;
field3.setText(""+num3) ;
//清楚前两个框
field1.setText("");
field2.setText("");
}
}
}
//监听类