方法的种类:
方法的种类分为三种:普通方法,构造方法,抽象方法。
普通方法即为普通函数,它是我们自己定义的一些方法。
构造函数是我们创建一个类时,它默认存在的,当我们创建此类对象时它会自动调用。
抽象方法是一种未经实现的方法,它只提供了这个方法,但方法未经实现,是一种抽象的,不具体的方法。
类的种类:
类和方法都有三种类型,类包括了普通类,抽象类和接口。
接口中只能存在抽象方法和常量属性,且其中的抽象方法和常量属性的修饰词abstract和static final都可以省略,在接口中,方法默认为抽象方法,属性默认为常量。接口是可以多继承的,也就是说一个类可以实现多个接口。
抽象方法中,可以存在普通方法,构造函数,也可以有抽象函数,要注意的是,对于类来说,一旦含有抽象方法,那么这个类就必然是抽象类,如果没有抽象方法的话,就必须在类名前加一个abstract修饰词。在抽象类中,属性既可以定义为常量属性,也可以定义为变量属性。
对于普通方法来说,不能存在有抽象方法,因为一旦有抽象方法的存在那么这个类就变为抽象类了,除此之外,普通类中都可以有(普通方法,构造函数,常量、变量)。
在类的三种类型中,接口和抽象类是比较特殊的,他们只能被继承而不能直接创建对象,因为无论是接口还是抽象类,都是抽象的,需要有一个实例化的类来继承他们才能创建对象。抽象类的继承用关键字extends来实现,而接口的继承则使用implements来实现。在继承了接口或是抽象类后,都需要重写它们的抽象方法,否则编译不通过。接口和抽象类的一个主要的作用就是用来约束子类,它们可以要求子类必须要实现某些方法,这样就起到了约束的作用。
属性的种类:
属性的种类分为两种:常量和变量
常量是指当属性定义时同时给属性赋值,且属性一经赋值后值就不可变,用static final来修饰,但在接口中,修饰词可以省略不写。
变量是指属性定义时可以不赋值,且在后续的操作过程中该属性的值可变。
鼠标监听器的分析:
鼠标监听器是一个接口,因此它不能直接创建对象,因此我们需要一个它的子类来用来创建对象,并且实现它的全部抽象方法。监听器的作用是用来监听鼠标在窗体上的动作,所以监听对象是窗体。
画笔类Graphics:
Graphics是一个特殊的类,它即不能被继承,也不能够直接的创建对象,当我们需要用到画笔时,只需要用到画笔的对象来获取画笔即可,获取后会返回一个画笔,之后就可以用返回的画笔来进行操作。
传参原理的分析:
传参实际上是地址的传递,例如下面两端代码中,我们先在第一段代码中获取了画笔g,但是我们需要在第二段代码中来调用g进行直线的绘制,但是这两段代码间明显是两个不用的作用域,所以我们无法在第二段代码中调用g来进行直线绘制,此时我们可以在第二段代码中重写其构造函数,在构造函数中声明一个Graphics类型的变量,这样,当我们在第一段代码中创建MyListener对象时,就会调用我们重写后的构造函数,此时我们将我们在代码一中获取到的画笔作为参数传递到构造函数中,这样,在创建MyListener对象时,我们获取得到的画笔的地址就传递进了我们所创建的MyListener对象中,这样我们就可以调用获取到的画笔了。
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
public class DrawBoard extends JFrame {
//设置窗体属性的方法
public void initFrame(){
//设置窗体属性 大小、位置、关闭方式、可见、标题
setSize(400, 400);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("画图板");
setVisible(true);
//拿画笔
Graphics g=this.getGraphics();
//给窗体添加监听器
MyListener ml=new MyListener(g);
//将监听器添加到窗体
this.addMouseListener(ml);
}
}
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class MyListener implements MouseListener {
int x1,y1,x2,y2;
Graphics g;
//重写构造函数
public MyListener(Graphics gs){
g=gs;
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
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);
}
}