一、核心知识点前置(必考)
1. 多接口冲突场景
当一个类同时实现多个接口,出现:同名但返回类型不同的属性/方法 → 必须使用 接口显式实现。
2. 显式实现规则
-
格式:接口名.成员名
-
不能加 public 修饰符(默认私有)
-
只能通过 对应接口变量 访问,不能通过类对象访问
3. 隐式实现
同名、同类型成员,只需要实现一次,所有接口共用。
二、冲突接口定义 IA、IB
interface IA
{
int A { get; set; }
string B { get; set; }
string C { get; set; }
void F1();
}
interface IB
{
string B { get; set; }
int C { get; set; }
void F1(int a);
}
冲突分析
1. B 属性:IA、IB 都是 string B → 同名同类型 → 无需冲突,隐式实现一次即可
2.C 属性:
-
IA:string C
-
IB:int C
同名、类型不同 → 严重冲突,必须显式实现
3. F1 方法:方法签名不同(无参/有参),属于重载,不冲突
三、Test 类实现多接口(核心考点)
class Test:IA, IB
{
// 隐式实现:共用同名同类型成员
public int A { get; set; }
public string B { get; set; }
// 显式实现 IA 的 C(string类型)
string IA.C { get; set; }
// 显式实现 IB 的 C(int类型)
int IB.C { get; set; }
// 无参F1 实现 IA
public void F1()
{
}
// 有参F1 实现 IB
public void F1(int a)
{
}
}
逐行解析
1. public string B
两个接口 B 都是 string 类型,实现一次,两个接口共用
2. string IA.C {get;set;}
显式实现 IA 的 C 属性,无访问修饰符
3. int IB.C {get;set;}
显式实现 IB 的 C 属性,无访问修饰符
4. 两个 F1 方法参数不同,构成方法重载,分别对应两个接口
显式实现核心规则(背诵)
多个接口:名字相同、类型不同 = 必须显式实现
多个接口:名字相同、类型相同 = 实现一次共用
四、Main 方法调用解析
IA t1 = new Test();
t1.C = "11"; // 调用 IA的 string C
IB i1 = new Test();
i1.C = 10; // 调用 IB的 int C
原理
显式实现的成员 只能通过对应接口变量访问
1. 接口 IA 变量 → 只能找到 IA.C(string)
2. 接口 IB 变量 → 只能找到 IB.C(int)
3. 不能用 Test 类对象直接点 C,会报错
五、接口的继承(接口拓展)
interface IC
{
string B { get; set; }
}
interface IQ : IC
{
int C { get; set; }
}
知识点
接口可以继承接口
IQ 继承 IC,意味着:
IQ 接口包含自己的所有成员 + 父接口 IC 的所有成员
六、类实现继承接口(必须实现全部层级成员)
class Test1 : IQ
{
public int C { get ; set ; }
public string B { get; set; }
}
规则(必考原话)
如果一个类实现了子接口,子接口继承了父接口,当前类必须实现【所有父接口+子接口】的全部成员
Test1 实现 IQ,IQ 继承 IC
所以必须实现:
IC 的 B 属性 + IQ 的 C 属性
七、接口 VS 抽象类(满分简答题标准答案)
相同点
-
1. 都不能被实例化
-
2. 都可以包含未实现的成员,由派生类实现
不同点(逐条背诵)
-
1. 成员结构不同
-
抽象类:可以有普通成员(有方法体)、字段、抽象成员
-
接口:全部成员都是抽象、无实现
-
2. 继承数量不同
-
抽象类:类只能单继承
-
接口:类可以多实现
-
3. 重写方式不同
-
抽象类:子类必须用 override 重写
-
接口:直接实现,不需要 override
-
4. 访问修饰符不同
-
抽象类:可以使用任意访问修饰符
-
接口:成员默认public,不能手动写修饰符
-
5. 成员类型不同
-
抽象类:可以有 字段、属性、方法
-
接口:不能有字段,只能有属性、方法
|
成员类型 |
可以有普通方法、字段、属性、抽象方法 |
只能有属性、方法,不能有字段、普通实现 |
|
继承数量 |
单继承,一个类只能继承一个抽象类 |
多实现,一个类可实现无数接口 |
|
重写方式 |
必须用 override 重写 |
直接实现,不需要 override |
|
访问修饰符 |
支持所有访问修饰符 |
默认public,不能手动修改 |
|
主体功能 |
代码复用、模板类 |
规范、行为约束、多态 |
八、终极总结口诀
多接口同名同类型,实现一次就够用
多接口同名不同型,显式实现分清楚
显式实现无修饰,只能接口变量读
接口可多可继承,全部成员要实现
抽象有体有字段,接口全抽





