day9
1.接口
01.定义
public interface 接口名{}
02.接口的使用
public class 类名 implements 接口名{}
- 不能创建对象,需要用实现类
- 用接口去实现类
03接口子类
- 重写所有抽象方法
- 将自己变成抽象方法
04.接口成员特点
- 构造方法:没有构造方法
- 成员变量:只能是常量,
默认加入三个关键字 public static final - 成员方法:只能是抽象方法
默认加入两个关键字 public abstract
05.接口和类之间的关系
- 类与类:继承关系(不支持多继承)
- 接口与类:实现关系
- 接口与接口:继承关系,可以单继承、多继承
2.监听
01.JButton组件
构造方法:
- public JButton() : 空白的, 不带任何文本和图片的按钮
- public JButton(String text) : 创建一个带有文本的按钮组件
案例:
public class l1button1 {
public static void main(String[] args) {
//1.设置窗体
JFrame frame = new JFrame();
//2.设置窗体宽高
frame.setSize(500,500);
//3.设置窗体关闭模式
frame.setDefaultCloseOperation(3);
//5.取消默认布局
frame.setLayout(null);
//创建按钮
JButton ab = new JButton("按钮f");
//按钮宽高:组件对象.setBounds(x,y,width,height);
ab.setBounds(0,0,100,100);
/*添加到面板:
窗体对象.getContentPane().add(组件)
*/
frame.getContentPane().add(ab);
//4.设置窗体可见
frame.setVisible(true);
}
}
02.JLabel组件:
用于展示文本和图片。
构造方法 :
-
public JLabel() : 创建一个不带文本, 不带图片的区域
-
public JLabel(String text) : 创建一个带文本的区域
案例:
//展示文本
JLabel as = new JLabel("你好啊");
as.setBounds(100,0,100,100);
frame.getContentPane().add(as);
//展示图片
JLabel as2 = new JLabel(new ImageIcon("C:\\image\\1.jpg"));
as2.setBounds(0,100,100,100);
frame.getContentPane().add(as2);
03.注册监听
ActionListener
ActionListener: 动作监听(鼠标左键, 空格)
案例:
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setSize(500,500);
frame.setDefaultCloseOperation(3);
frame.setLayout(null);
JButton aq = new JButton("按钮f");
aq.setBounds(100,0,100,100);
frame.getContentPane().add(aq);
//添加动作监听,需要一个接口的实现类对象
aq.addActionListener(new Actionimpl());
frame.setVisible(true);
}
}
//创建一个接口
class Actionimpl implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("我被点了");
}
}
KeyListener
KeyListener :键盘监听(键盘按下了, 键盘松开了)
案例:
//添加键盘监听,需要一个接口的实现类对象
frame.addKeyListener(new KetlistenerImpl());
frame.setVisible(true);
}
}
//创建一个接口
class KetlistenerImpl implements KeyListener{
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println("键盘被按下");
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("键盘北宋开了");
}
3.多态
01.前提条件
有继承关系
方法重写
有父类引用指向子类对象
02.访问特点
成员方法:编译看左边(父类),运行看右边(子类)
成员变量:编译看左边(父类),运行看左边(父类)
03.向上转型与向下转型
向上转型:父类引用指向子类对象
向下转型:将子类对象的地址,重新赋值给子类的引用
注:会存在类型转换异常,可利用instanceof进行纠正
案例:
- 向上转型:Fu f = new Zi();
public static void main(String[] args) {
student(new student1());
student(new student2());
}
public static void student(Fu s) {
s.work();
}
- 向下转型用instance纠正:Zi z = (Zi)f;
public static void main(String[] args) {
student(new student1());
student(new student2());
}
public static void student(Fu s) {
s.work();
if (s instanceof student1){
//强转成student1
student1 p1 = (student1) s;
p1.play1();
}
else if (s instanceof student2){
强转成student2
student2 p2 = (student2) s;
p2.play2();
}
}