抽象类
抽象类格式:public abstract class 类名{}
抽象类方法格式:public abstract 返回值类型 方法名(){}
注意:
#抽象类不能实例化
#抽象类中不一定有抽象方法,但有抽象方法一定是抽象类
#可以有构造方法
#抽象类的子类要么得重写所有抽象方法,要么得是抽象类
接口
#接口用关键字interface来定义
public interface 接口名{}
#接口不能实例化
#接口和类的实现是通过关键字implements实现
public class 类名 implements 接口名{}
#接口的子类要么得重写所有抽象方法,要么得是抽象类(可以单实现和多实现)
特点
#成员变量
只能是常量
默认修饰符:public static final
#构造方法
没有
#成员方法
JDK7以前只能是抽象方法
JDK8可以定义有方法体的方法(默认,静态)
格式:public default 返回值类型 方法名(){}
注意:子类不会被强制重写,重写时要去掉default,多个接口存在相同名字必须重写
可以使用静态方法:public static 返回值类型 方法名(){}(只能通过该接口调用,不能通过类名和方法名)
JDK9可以定义私有方法
其实就是内部消化,防止句子重复成分过多,也能防止其他类使用(静态私有的方法也可以)
接口和接口的关系可以是单继承也可以是多继承
适配器模式
对接口的抽象方法实施空实现,再用子类对真正需要的方法重写
内部类
成员内部类
写在成员位置的属于外部类成员(可以直接访问外部类)
获取内部类对象
#直接创建:外部类名.内部类名 对象名=new 外部类名().new 内部类名();
#外部类创建方法(return new 内部类名();)也可以调用内部类
静态内部类
1.静态内部类也是成员内部类的一种
2.静态内部类只能访问外部类的静态变量和静态方法(访问非静态需要创建外部类的对象)
//创建静态内部类对象的格式
外部类名.内部类名 对象名=new 外部类.内部类();
//调用静态内部类方法的格式
外部类名.内部类名.方法名();
局部内部类
1.就是将内部类定义在方法中,类似于方法中的局部变量
2.外界是无法直接访问的,必须创建对象
创建对象:内部类 对象名=new 内部类();
3.该类可以直接访问外部成员,也可以直接访问方法内的局部变量
匿名内部类(包含继承/实现,方法重写,创建对象)
格式:new 类名或接口名(){
重写方法;
};
使用场景:如果继承类/实现类只需要用一次就可以使用匿名内部类
匿名内部类的多态
可以用: 类名 对象名 =new 类名或接口名(){
重写方法;
};
这样就是匿名内部类的多态,重写的方法满足编译看左边,运行看右边。
事件
#事件源:按钮 图片 窗口...
#事件:操作(单机鼠标,鼠标划入)
#绑定监听:当事件源发生了某事件,则执行某个代码
键盘监听:KeyListener 鼠标监听:MouseListener(划入,划出,按住,松开,单机) 动作监听:ActionListener(空格,鼠标左键点击)
package com.jennsy.ui;
import javax.swing.*;
import java.awt.event.*;
public class setJFrame extends JFrame implements MouseListener, ActionListener, KeyListener {
//创建按钮(鼠标监听和动作监听需要)
JButton jButton=new JButton("点我啊");//可以是任何内容
public setJFrame(){
//*****界面初始化
//设置页面大小
this.setSize(603,680);
//设置标题
this.setTitle("练习");
//设置界面顶置
this.setAlwaysOnTop(true);
//设置居中
this.setLocationRelativeTo(null);
//设置关闭游戏虚拟机停止
this.setDefaultCloseOperation(3);
//****事件
//设置按键大小
jButton.setBounds(0,0,100,50);
//给按钮创建动作监听和鼠标监听
jButton.addActionListener(this);
jButton.addMouseListener(this);
//将按钮添加到界面
this.getContentPane().add(jButton);
//显示界面
this.setVisible(true);
}
//
@Override
public void actionPerformed(ActionEvent e) {
//获取当前被操作的按钮
Object source=e.getSource();
}
@Override
public void keyTyped(KeyEvent e) {
//获取某个按键(按键都有对应数值)
int code=e.getKeyCode();
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}