MST

星途 面试题库

面试题:Go接口初始化策略:接口嵌套与初始化

假设有两个接口A和B,B接口嵌套了A接口。请阐述在这种情况下,初始化B接口实例时,与A接口相关的初始化过程是怎样的?并给出代码示例说明不同初始化方式对接口行为的影响。
25.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

初始化过程阐述

当初始化 B 接口实例时,由于 B 接口嵌套了 A 接口,所以 A 接口相关的初始化过程会隐式地包含在 B 接口的初始化过程中。具体来说,实现 B 接口的类必须同时实现 A 接口中定义的所有方法。在创建实现 B 接口的实例时,就意味着 A 接口中定义的行为也被初始化并准备就绪,因为实现类必须满足 A 接口的契约。

代码示例(以Java为例)

  1. 定义接口
interface A {
    void methodA();
}

interface B extends A {
    void methodB();
}
  1. 实现接口
class ImplementAB implements B {
    @Override
    public void methodA() {
        System.out.println("Implementation of methodA");
    }

    @Override
    public void methodB() {
        System.out.println("Implementation of methodB");
    }
}
  1. 测试不同初始化方式对接口行为的影响
public class Main {
    public static void main(String[] args) {
        // 以B接口类型初始化
        B bInstance = new ImplementAB();
        bInstance.methodA();
        bInstance.methodB();

        // 以A接口类型初始化(实际上还是同一个实现类实例)
        A aInstance = new ImplementAB();
        aInstance.methodA();
        // aInstance.methodB(); 此行会报错,因为A接口没有定义methodB
    }
}

在上述代码中,当以 B 接口类型初始化实例时,可以调用 A 接口和 B 接口的方法,因为 B 接口继承自 A 接口。而当以 A 接口类型初始化实例时,只能调用 A 接口定义的方法,体现了接口类型对可调用方法的限制,这就是不同初始化方式对接口行为的影响。