Java接口的深入理解与应用
立即解锁
发布时间: 2025-08-18 02:26:21 阅读量: 2 订阅数: 18 

### Java 接口的深入理解与应用
#### 1. 部分接口实现
在 Java 中,实现接口时不一定要实现接口中的所有方法,但如果不实现所有方法,类必须声明为抽象类。例如:
```java
import static conversions.ConversionFactors.INCH_TO_MM;
import static conversions.ConversionFactors.OUNCE_TO_GRAM;
public abstract class MyClass implements Conversions {
// Implementation of two of the methods in the interface
@Override public double inchesToMillimeters(double inches) {
return inches*INCH_TO_MM;
}
@Override public double ouncesToGrams(double ounces) {
return ounces*OUNCE_TO_GRAM;
}
// Definition of the rest of the class...
}
```
这里的 `MyClass` 类没有实现 `Conversions` 接口的所有方法,所以它必须声明为抽象类。不能创建 `MyClass` 类型的对象,需要定义一个子类来实现接口中剩余的方法。
关于 `@Override` 注解,对于非抽象的实现类,编译器会在未正确实现接口方法时报错,所以不需要使用该注解。但在抽象类中,使用 `@Override` 注解可以确保接口方法签名错误被标记出来。
#### 2. 扩展接口
可以使用 `extends` 关键字基于一个接口定义另一个接口,扩展的接口会继承被扩展接口的所有方法和常量。例如:
```java
public interface Conversions extends ConversionFactors {
double inchesToMillimeters(double inches);
double ouncesToGrams(double ounces);
double poundsToGrams(double pounds);
double hpToWatts(double hp);
double wattsToHP(double watts);
}
```
现在 `Conversions` 接口包含了 `ConversionFactors` 接口的成员,实现 `Conversions` 接口的类可以使用 `ConversionFactors` 中的常量来实现方法。`ConversionFactors` 被称为 `Conversions` 接口的超接口。
#### 3. 接口与多重继承
与类只能继承一个父类不同,接口可以扩展任意数量的其他接口。例如:
```java
public interface MyInterface extends HisInterface, HerInterface {
// Interface members – constants and abstract methods...
}
```
`MyInterface` 继承了 `HisInterface` 和 `HerInterface` 的所有方法和常量,这就是多重继承。在 Java 中,类不支持多重继承,只有接口支持。
需要注意的是,如果两个或多个超接口声明了具有相同签名的方法,这些方法在所有声明它们的接口中必须具有相同的返回类型,否则编译器会报错。
#### 4. 接口的使用
接口声明的方法定义了一组标准操作,不同的类可以通过实现接口来添加这组标准操作。因此,不同类型的对象可以共享一组通用操作,尽管具体实现可能不同。接口常被描述为一组操作的契约。
接口还可以定义类型,从而实现多态性。虽然不能创建接口类型的对象,但可以创建接口类型的变量。例如:
```java
Conversions converter = null;
```
这个变量可以存储实现 `Conversions` 接口的任何类对象的引用,从而可以多态地调用 `Conversions` 接口中声明的方法。
#### 5. 接口与多态性示例
以家庭视听设备和遥控器为例,多个设备(如电视、DVD 播放器)都有各自的遥控器,这些遥控器有一些共同的按钮(如电源开关、音量调节等)。可以定义一个通用的遥控器接口:
```java
public interface RemoteControl {
boolean powerOnOff(); // Returns new state, on = true
int volumeUp(int increment); // Returns new volume level
int volumeDown(int decrement); // Returns new volume level
void mute(); // Mutes sound output
int setChannel(int channel); // Set the channel number and return it
int channelUp(); // Returns new channel number
int channelDown(); // Returns new channel number
}
```
以下是实现该接口的 `TV` 类和 `DVDPlayer` 类:
```java
import static java.lang.Math.max;
import static java.lang.Math.min;
public class TV implements RemoteControl {
public TV(String make, int screensize) {
this.make = make;
this.screensize = screensize;
// In practice you would probably have more
// arguments to set the max and min channel
// and volume here plus other characteristics for a particular TV.
}
public boolean powerOnOff() {
power = !power;
System.out.println(make + “ “+ screensize + “ inch TV power “
+ (power ? “on.”:”off.”));
return power;
}
public int volumeUp(int increment) {
if(!power) { // If the power is off
return 0; // Nothing works
}
// Set volume - must not be greater than the maximum
volume += increment;
volume = min(volume, MAX_VOLUME);
System.out.println(make + “ “+ screensize + “ inch TV volume level: “
+ volume);
return volume;
}
public int volumeDown(int decrement) {
if(!power) { // If the power is off
return 0; // Nothing works
}
// Set volume - must not be less than the minimum
volume -= decrement;
volume = max(volume, MIN_VOLUME);
System.out.println(make + “ “+ screensize + “ inch TV volume level: “
+ volume);
return volume;
}
public void mute() {
if(!power) { // If the power is off
return; // Nothing works
}
volume = MIN_VOLUME;
Sy
```
0
0
复制全文
相关推荐










