Java中还有两个相似的概念叫做重写与重载。
重写是在继承中发生的,被继承中的类的方法内容可能不是很符合要求,需要改变,所以在继承类中的那个类中重写该方法。重写的重点在于外壳不变,核心重写。就像市场上的山寨手机一样,外壳是一样的,功能输出是一样的,但是核心肯定是不一样的。Java官方关于重写的注意事项的说法是这样的:经过总结,鄙人的拙见是:重写必须是继承的类中方法重写被继承的类中的方法,被继承类中的构造方法除外。重写时方法包装外壳都不变,就是类似于public void method(……){}这层不动,里面的重写就好了,就像空城计里诸葛亮把里面的百姓都遣散了,只留一个空城壳,人家司马懿也一样认识那座城一样,我们把方法体全删了,程序也认外面那个方法壳。但是如果诸葛亮把城门换了,司马懿就不会那么纠结了吧。也就是说,如果方法外壳有改动,程序是会报错的。final是“不可改动”的意思,自然不能重写。static是静态的,能被再次声明。当父类和子类在同一个包中,private(私有的)和final不能被重写;不在一个类中时,public,protected(受保护的)和非final的可以被重写(虽然访问修饰符就那三个 )
下图为证:Java关键字
super关键字:当子类调用父类重写前的方法时,需要在子类重写的方法体第一句使用super关键字。
看一个例子:
方法的重载:方法的重载比方法的重写轻松太多啦,除了方法名啥都可以尽情改。
例:
重载和重写的关系如下
关于super关键字的补充代码:
package wuziqiV1;
import java.awt.Graphics;
import javax.swing.JFrame;
public class Mainframe extends JFrame implements qipan{
/*** @param argss*/
//继承JFrame调用相关方法,继承棋盘接口,方便改变值public static void main(String[] args) {
// TODO Auto-generated method stubMainframe mf=new Mainframe();
mf.setSize(900,900);
mf.setDefaultCloseOperation(3);
mf.setLocationRelativeTo(null);
mf.setVisible(true);
Graphics g=mf.getGraphics();
mf.paint(g);
DrawListener dl=new DrawListener(g);
mf.addMouseListener(dl);
}
public void chess(Graphics g){
for (int i = 0; i < Rows; i++) {
g.drawLine(x0, y0 + i * size, (Columns - 1) * size + x0, y0 + i
* size);
}
// 画棋盘竖线for (int j = 0; j < Columns; j++) {
g.drawLine(x0 + j * size, y0, x0 + j * size, (Rows - 1) * size + y0);
}
}
public void paint(Graphics g){
super.paint(g);//重绘chess(g);
}
}
接口
package wuziqiV1;
public interface qipan {
public static finalint x0=50;//表格左上角起点x值public static finalint y0=50;//表格左上角起点y值public static finalint Rows=16;//横向线条数public static finalint Columns=16;//纵向线条数public static finalint chesssize=40;//棋子直徑public static finalint size=50;//單元格大小}
运行结果
将页面最大化