Java——接口、抽象类
方法的分类
普通方法
格式:public 返回类型 变量名(){}
理解:对象执行的方法。
构造方法
格式:public 变量名(){}
理解:赋予对象的行为特性。
抽象方法
格式:public abstract 变量名(); (注意分号)
理解:因为没有{},所以抽象方法是没有过程的,也因此要用;结尾。
类的分类
普通类
格式:public class 类名{}
抽象类
格式:public abstract class 类名{}
接口
格式:public interface 类名{}
|
普通方法 |
抽象方法 |
构造方法 |
对象创建 |
普通类 |
√ |
|
√ |
√ |
抽象类 |
√ |
√ |
√ |
|
接口 |
|
√ |
|
|
补充:
属性有两种,常量和变量。
常量:值不变。格式:static final 类型 属性名;
变量:值可改。格式:类性 属性名;
因为接口允许的方法是单一的,并且不允许变量的出现,所以abstract和static final可省略。
抽象类和接口的作用
1、作为父类,被继承。
2、由1及上述表格可得,抽象类和接口约束了子类方法的定义。也就是说,如果子类是普通类,由于普通类不可以使用抽象方法,所以要重写父类的抽象方法,即把抽象方法具体化。
可以形象理解:接口:老板,负责发号施令、确定所要做的任务。
抽象类:管理层,负责发号施令,也可以完成一部分任务。
普通类:员工,接受命令干活。
不同于普通类和抽象类,多个接口可被一个子类继承。接口之所以称为接口,我想是因为接口这个东西是多选择的,插这个可以有这个属性、功能,插另外的就有另外的,一起插就如排插,接口间互不影响。并且可以有:既继承了普通类或者抽象类,也继承了接口,但要让普通类或者抽象类先写。
public class 类名 extends 普通类或者抽象类的类名 implements 接口类名1,接口类名2……{}
监听器
简易绘图工具制作:
窗体实现包:java.swing.JFrame
窗体的属性设置:大小、位置、标题、是否可见(整个窗体,不可见就什么都看不到了)、关闭操作(1关闭后不退出程序,2关闭后延迟推出程序,3关闭后立刻退出程序)
监听器包:java.awt.event.MouseListener
图形绘制包:java.awt.Graphics
监听器的功能:
用于监视某个组件的即时(动态)行为。
画笔的实现:
调用:主函数—>窗体—>画笔
不能继承画笔这个方法,涉及到更深的问题。只能通过另外一个对象(图形需要在此展示的对象,如窗体)来获取画笔,然后再把这个对象绑定到窗体上。
画笔的获取必须在设置窗体的setVisible之后。
代码展示
主函数
package com.Eric.drawpen;
public class Main {
public static void main(String[] args) {
Frame p = new Frame();
p.startFrame();
}
}
窗体
package com.Eric.drawpen;
import java.awt.Graphics;
import javax.swing.JFrame;
public class Frame extends JFrame{
public void startFrame() {
this.setSize(400,400);
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
this.setTitle("primary");
this.setVisible(true);
//Graphics g = Graphics(); 不允许创建一个类再创建Graphics对象
Graphics g = this.getGraphics();
Listener m = new Listener(g);//创建对象会调用构造器
this.addMouseListener(m);
}
}
监听器
package com.Eric.drawpen;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class Listener implements MouseListener{
public int x1,x2,y1,y2;
public Graphics g;//创建变量
public Listener(Graphics g1) {//构造器的创建
g = g1;
}
public void mousePressed(MouseEvent e) {
x1 = e.getX();
y1 = e.getY();
}
public void mouseReleased(MouseEvent e) {
x2 = e.getX();
y2 = e.getY();
//释放瞬间画线
g.drawLine(x1, y1, x2, y2);
}
//不需要的方法
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}