一篇文章带你了解Java接口与继承
前言
Java面向对象编程(OOP)中的两个重要概念:接口(Interface)和继承(Inheritance)。接口和继承共同点是都可以扩展代码的复用性,降低代码耦合性;不同点是接口是定义方法的集合,而继承是用于实现类之间的继承关系。
Java接口
什么是接口?
接口是一种抽象类型,它定义了类必须遵循的一组规则。接口以interface关键字来定义,包含若干个方法声明(不是方法实现),方法默认为public abstract类型。
public interface Car {
void start();
void stop();
void changeGear(int gear);
}
接口可以包含属性,但这些属性必须是public、static、final类型。
public interface Car {
public static final int WHEELS = 4;
}
接口与类类似,也可以继承其他接口,用extends关键字来实现,一个接口可以继承多个其他接口。
public interface sportsCar extends Car{
void turboBoost();
}
为什么使用接口?
- 多重继承
Java不支持多重继承,但是可以通过实现多个接口,达到类似的效果。
- 程序解耦
接口可以使得程序的不同模块之间解耦,降低模块之间的耦合度,使得程序易于扩展和维护。
Java继承
什么是继承?
继承是一种面向对象的设计模式,实现了类之间的共享性和相互封装性。通过继承,子类可以继承父类的所有属性和方法。
一个简单的继承的例子,一个矩形类和正方形类,正方形类是矩形类的子类。
public class Rectangle {
private int length;
private int width;
public Rectangle(int length, int width) {
this.length = length;
this.width = width;
}
public int getArea() {
return length * width;
}
}
public class Square extends Rectangle{
public Square(int length) {
super(length, length);
}
}
为什么使用继承?
- 代码复用
继承可以通过代码复用来减少重复编码,比如上面的正方形类,就可以复用矩形类的代码。
- 代码维护
通过继承可以实现代码的易维护性,我们可以将共同的代码放在父类中,子类中只需要实现自己的特殊需求即可。
示例
下面来通过两个示例进行说明
示例1
我们要构建一份菜单,菜单中包括了主食,前菜和饮料。我们可以定义一个接口来描述这份菜单。
public interface Menu {
void addMainCourse(String name);
void addAppetizer(String name);
void addDrink(String name);
}
接下来,我们根据这个接口来实现这份菜单。
public class WesternMenu implements Menu{
@Override
public void addMainCourse(String name) {
System.out.println(name + " added as a Western main course");
}
@Override
public void addAppetizer(String name) {
System.out.println(name + " added as a Western appetizer");
}
@Override
public void addDrink(String name) {
System.out.println(name + " added as a Western drink");
}
}
public class ChineseMenu implements Menu{
@Override
public void addMainCourse(String name) {
System.out.println(name + " added as a Chinese main course");
}
@Override
public void addAppetizer(String name) {
System.out.println(name + " added as a Chinese appetizer");
}
@Override
public void addDrink(String name) {
System.out.println(name + " added as a Chinese drink");
}
}
上面的示例中,我们定义了菜单接口,并且通过不同的实现类实现了不同的菜单类型。
示例2
我们实现一个简单的继承例子,来说明继承的用法。
public class Animal {
public void eat(){
System.out.println("Animal is eating.");
}
}
public class Dog extends Animal{
@Override
public void eat(){
System.out.println("Dog is eating.");
}
public void bark(){
System.out.println("Dog is barking.");
}
}
上面的示例中,我们定义了一个Animal类,然后通过继承实现了Dog类。Dog类继承了Animal类的eat方法,并且实现了自己的bark方法。
结论
接口和继承都是面向对象编程中非常重要的概念。接口可以帮助我们解耦程序模块,同时也可以实现多重继承;继承可以帮助我们减少代码的重复性,同时也可以提高程序的维护性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一篇文章带你了解java接口与继承 - Python技术站