继承是面向对象中的重要概念,它让一个类来继承另一个类,这个类被称为子类,被继承的类则被称为父类。子类继承父类后可以直接调用父类的方法可以实现代码的复用,也可以在其中添加自己的特性。子类就是一个容器用来存储父类中的属性和方法,比如父类中的protected前缀的对象在子类中就可以直接调用,但是父类中的私有成员子类无法直接调用,子类只能调用自己的私有成员。在Java中任何类都会继承Object类,Object是所有类的父类,在Java语言中类的继承通过关键字extends来实现的,public class 子类名 extends 父类名{ }。
public class Chessboard extends JPanel {
public void paint(Graphics g) {
super.paint(g);
g.drawLine(10,10,100,100);
}
}
这个就是继承了画布JPanel类,并且重写了画布的刷新方式。
继承除了类继承类之外,还有类使用(implements)接口,接口继承(extends)接口,接口是一个抽象的概念。接口的实现格式为public interface 接口名{ },接口的一个例证就是动作监听器ActionListener,接口默认使用public static final 修饰符修饰成员属性,使属性在初始化赋值后不再改变。接口中的方法有抽象方法,默认方法和静态方法,并且方法默认是public。抽象方法是接口的核心,没有大括号,没有方法体,只有结构,想要实现抽象方法只有在子类中实现。默认方法使用default修饰,可以被子类继承。静态方法可以使用接口名进行调用。
接口是抽象的结构,并且也有抽象方法,无法直接创建接口对象,如果能够直接创建对象那么就可以调用抽象方法,但是抽象方法没有方法体,所以是无法创建对象的。我们要实现接口就要使用具体的类来继承接口,一个类可以继承多个接口,同时继承完接口之后类中要对接口的抽象方法进行重写,保证抽象方法变为具体的方法。类实现接口的格式为public 类名 implements 接口名 { }。实例如下:
public class Chess implements MouseListener {
public void mouseClicked(MouseEvent e) {
System.out.println("点击");
}
public void mouseEntered(MouseEvent e) {
System.out.println("进入");
}
public void mouseExited(MouseEvent e) {
System.out.println("退出");
}
public void mousePressed(MouseEvent e) {
System.out.println("按下");
}
public void mouseReleased(MouseEvent e) {
System.out.println("松开");
}
}
接口mouseListener有五个抽象方法,在通过类继承之后就必须重写方法。
类和接口的区别在于,它们抽象的地方不同,类中的属性是抽象的没有具体的值,而接口的属性是具体值。接口的方法是抽象的,但是类中的方法是具体的。但是接口和类都是一种数据类型。我们发现不同的类中有一些功能和行为是相同的,所以总的来说接口是以行为进行分类的,通过定义一个接口就可以对这些行为进行设计,比如动作监听器ActionListener和鼠标监听器MouseListener它们就是通过识别我们在添加其的类中的不同操作进行反馈的,比如我在窗体上按按钮通过动作监听器进行弹窗,我在窗体按压鼠标后松开通过鼠标监听器来实现绘画。