面试题答案
一键面试Java接口实现多继承
在Java中,类只能继承一个父类,但接口可以通过extends
关键字继承多个接口,从而实现类似多继承的效果。例如:
interface InterfaceA {
void methodA();
}
interface InterfaceB {
void methodB();
}
interface InterfaceC extends InterfaceA, InterfaceB {
void methodC();
}
class MyClass implements InterfaceC {
@Override
public void methodA() {
System.out.println("Implementing methodA");
}
@Override
public void methodB() {
System.out.println("Implementing methodB");
}
@Override
public void methodC() {
System.out.println("Implementing methodC");
}
}
在上述代码中,InterfaceC
继承了InterfaceA
和InterfaceB
,MyClass
实现了InterfaceC
,也就同时实现了InterfaceA
和InterfaceB
的方法,实现了类似多继承。
与类继承的区别
- 继承个数:
- 类继承:Java中类只能单继承,即一个类只能有一个直接父类。这是为了避免菱形继承问题(多个父类中存在相同方法导致冲突)。
- 接口继承:接口可以多继承,一个接口可以继承多个接口,通过
extends
多个接口来实现。
- 实现方式:
- 类继承:子类继承父类后,会继承父类的属性和方法(除了
private
修饰的),并且可以重写父类的非final
方法。 - 接口继承:接口继承只是定义了方法签名,并没有方法的具体实现,实现接口的类必须实现接口中定义的所有方法。
- 类继承:子类继承父类后,会继承父类的属性和方法(除了
- 访问修饰符:
- 类继承:父类的属性和方法有不同的访问修饰符,如
private
、protected
、public
等,子类对父类成员的访问受这些修饰符限制。 - 接口继承:接口中的方法默认是
public
和abstract
的(JDK 8 之前),不能使用其他访问修饰符,实现类必须以public
来实现这些方法。
- 类继承:父类的属性和方法有不同的访问修饰符,如
实际项目中接口多继承特性的应用场景
- 功能组合:在图形绘制项目中,可能有
Drawable
接口定义绘制方法,Resizable
接口定义缩放方法,Movable
接口定义移动方法。一个Rectangle
类如果需要同时具备绘制、缩放和移动功能,可以实现一个继承了这三个接口的新接口。
interface Drawable {
void draw();
}
interface Resizable {
void resize(int newWidth, int newHeight);
}
interface Movable {
void move(int x, int y);
}
interface Shape extends Drawable, Resizable, Movable {}
class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Drawing rectangle");
}
@Override
public void resize(int newWidth, int newHeight) {
System.out.println("Resizing rectangle to " + newWidth + "x" + newHeight);
}
@Override
public void move(int x, int y) {
System.out.println("Moving rectangle to (" + x + ", " + y + ")");
}
}
- 插件化架构:在一个大型的软件系统中,可能有不同的模块提供不同的功能接口,如
DataLoader
接口用于数据加载,DataProcessor
接口用于数据处理,DataExporter
接口用于数据导出。一个DataModule
类如果需要实现数据加载、处理和导出的功能,可以实现继承了这三个接口的新接口,这样不同模块功能可以灵活组合。