总结我们以前所学的东西,我们会
发现有很多困扰我们的东西,今天我就要先解决三座大山的压迫:
重载 重写
重绘
重载:重载我在之前曾经有讲到过,重载分为构造方法①的重载和普通方法的重载。方法的重载主要的不同就是传参的不同:例如
构造方法:
public Student(int score){}
public Student(String name){}
public Student(int i,int j,String name){}
不同的地方就是参数的不同,而这里边我们要特别注意的是,什么情况算是参数不同?
⑴ 数据类型不同
public Student(int score){}
public Student(String name){}
⑵顺序不同
public Student(int score,String name){}
public Student(String name,int score){}
⑶个数不同
public Student(String name){}
public Student(int i,int j,String name){}
方法的重载是十分重要的,对于我来说,尤其是构造方法的重载。就目前我接触的而言,我们经常会用构造方法来传参,传递的参数不一定都是一致的。所以,构造方法的重载对于我来说就应该十分重要了。
① 在这里举个
例子,我们最近在做五子棋,之前的画板也是,我们都用到了画笔。二画笔我们是从画布上取得的,但是我们真正用到的地方确实要在
监听器里边,那么我们怎么来把画笔传过去呢?
JPanel jp=new JPanel()
Graphics g=jp.getGraphics();
ChessListener l=new ChessListener(g);//这些都是在在主函数类里面的
//而在监听类里边里
public ChessListener(Graphics g){
this.g=g;//这样画笔就传过来了!!!
}
这也是构造方法的一个重要作用,那么,构造方法在实例化对象时,又有什么作用呢?
初始化的作用!!!
Student stu=new Student("张三");
这时候初始化的名字就是张三了。
我们为什么要初始化呢?
每个类里边都有一个默认的无参的构造方法
重写:什么是重写,重写就是方法名相同,参数个数相同,参数类型相同,顺序相同,唯一不同的就是方法体。我在前边详细的讲解了什么是方法的重写,这里就不做介绍,其实最主要的是用处。方法的重写主要是子类继承父类的时候 ,可能会重写父类的构造方法,重写方法的访问修饰符可以大于或者等于父类方法的访问修饰符。
这里我们就要讲讲父类和子类方法的使用了。
//父类
public
class Student{
public void Study(){
System.out.println("我在上政治")
}
}
//子类
public class UNStudent{
public static void main(String [] args){
Student stu=new UNStudent();//自动转型
stu.Study();//调用
学习方法时,会先调用子类里边的方法,因为你在子类里重写了
//不要觉得这是多此一举哦,这是很有
意义的,比如我们在
画图板重绘②的 //时候!!!!,但是还要注意一点就是,如果这样⑤⑥⑦
stu.play();⑤//这是否可以呢?答案是不可以,因为父类里没有这个方法,你是调用不到的,stu是Student对象,不是UNStudent对象,除非你强制转型,即:
UNStudent stu1=(UNStudent)stu;
stu1.play();
}
public void Study(){
System.out.println("我在上政治")
}
public void play(){
System.out.println("我在玩")
}
}
public void paint(Graphics g){③
super.paint(g);④
for(int i=0;i<DrawPaneListener.getSize();i++){
Shapes
shapes=DrawPaneListener.array[i];
shapes.draw((Graphics2D)g);②//看到这里了没有,正//是因为父类可以去调用子类里边的方法,所以我们只需要写着一个语句,如若不然,我们岂不是要//画一个,写一个
}
}
重绘:什么是重绘,重绘就是当你画完一样东西时,因为拖动,变换大小等因素,会导致画布上的东西消失,这时我们就要把我们画过的东西再重新画一遍,这就是重绘。
重绘的时候有很重要的东西需要谨记,那就是,方法名,参数类型参数名必须一致。不然就不是重绘。③与下面的代码对比:
public void paint(Graphics2D g){}
这就不是方法的重绘了,而是重载。所以,重绘其实就是paint方法的重写(?)
其实还有一点,就是当我们重绘时,如果绘方法原来并不是我们自己写的,那么我们最好继承一下父类的重绘方法,不然我们可能会在重写时缺少对本来元素的掌握,就比如我们上述的重绘方法④,如果我们没有这句,那么在重绘时,画布就会发生变化!!