关键字:extends
格式:public class 子类 extends 父类
单继承:一个子类只有一个父类(不同于接口),可以多层次继承
一.继承的作用
1)子类可以继承父类的属性和方法
以学生类和大学生类为例
public class Student {
String name;
public void study(){
System.out.println(name+"正在学习");
}
}
public class UNStudent extends Student{
public static void main(String[]args){
UNStudent ustudent=new UNStudent();
ustudent.name="嘉义";
ustudent.study();
//可以用父类的name属性和study方法
}}
//运行结果
//嘉义正在学习
二.方法重写
1)为什么要进行方法重写?
从父类那里继承的方法在子类中不太适用,需要改造
2)什么样的方法算方法重写?
-要是在存在继承关系的两个类之间
-与父类中的方法相比,在大括号之前,除了参数名可以不一样,其他均需完全一致
-方法重写成功之后会有标识符
public class UNStudent extends Student{
public void study(){
System.out.println("子类重写了study方法");
}
//重写了父类中的study方法
public static void main(String[]args){
UNStudent ustudent=new UNStudent();
ustudent.name="嘉义";
ustudent.study();
}}
//运行结果
//子类重写了study方法
3)有时只是需要对父类中原有的方法稍作改造,怎么保留父类中的该方法?
保留父类中该方法的功能需要用到super关键字
super表示表示当前类的父类对象
public void study(){
super.study();
System.out.println("子类重写了study方法");
}
//运行结果
//嘉义正在学习
//子类重写了study方法
三.继承在五子棋中的实际应用
继承JFrame与重写它的paint方法
1)为什么要继承JFrame?
所有的swing组件都有一个paint方法,当窗体的大小被改变或被隐藏时,窗体上所有的swing组件重新调用paint方法(自动调用),绘制组件本身,让它显示在屏幕上
棋盘是画在窗体上的,所以需要继承窗体类,重写窗体的paint方法,让棋盘随着窗体被绘制出来
2)为什么要重写paint方法?
在从父类JFrame继承的原有的paint方法中,只会重绘组件和窗体,原本画在窗体上的线不是swing组件,故不可以被重绘,要想棋盘不丢失,把棋盘写入paint方法中即可,这样每次窗体发生改变调用paint方法时,棋盘就也会被绘制了
public void paint(Graphics g){
super.paint(g);
for(int i=0;i<16;i++){
g.drawLine(50,50+i*40,50+15*40,50+i*40);
g.drawLine(50+i*40,50,50+i*40,50+15*40);
}
}
3)要保证窗体对象是子类的
窗体对象自动调用的是自己类的paint方法
JFrame类的对象调用的是父类未重写的paint方法
自定义类的对象调用的是子类已重写的paint方法