接口的显示实现和隐式实现

简介:

接口的实现,上学的时候就接触的概念了,现在毕业工作了,没想到自己有对接口的实现有了新的发现。

基础的知识,总是在工作中不断的更新和理解的更加深刻。

对于编程语言和平台中的高层建筑,总是会出现不断地变化,但是底层的基础却是一成不变的(变化很小). 所以我认为程序员应该把精力向这些基础的能力倾斜,修炼自己的内力,这样就能够在程序员这个岗位上做到做上一辈子,避开新生力量的竞争和体现自己的价值。

 

以上是无关主题的废话, 下面是正文:

 

一、显示实现和隐式实现。

隐式实现:

这是基本所有人都知道的实现方式目前常用的方式:

复制代码
public interface IReview
{
    void GetReviews();
}
public class ShopReview :IReview
{
//隐式实现
public void GetReviews(){} }
复制代码

这种方式是隐示实现:

IReview rv = new ShopReview(); rv.GetReviews();

ShopReview rv = new ShopReview(); rv.GetReviews();

都可以调用GetReviews这个方法。

 

显示实现:

复制代码
public interface IReview
{
    void GetReviews();
}
public class ShopReview :IReview
{
    //显式实现
    void IReview.GetReviews(){}
} 
复制代码

 

通过这种方式的接口实现。GetReviews就只能通过接口来调用:

IReview rv = new ShopReview();rv.GetReviews();

下面的这种方式将会编译错误:

ShopReview rv = new ShopReview();rv.GetReviews();

 

结论:

隐示实现接口和类都可以访问

显示实现只有接口可以访问。

也就是,接口可以访问显示实现和隐式显示,而类只可以访问隐式实现

 

显示实现的好处:

1:隐藏代码的实现

当用类的实例的时候,没有办法知道它有实现的接口的方法。

2:在使用接口访问的系统中,限制调用者只能通过接口调用而不是底层的类来访问。


Creative Commons License

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名justrun(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言


本文转自JustRun博客园博客,原文链接:http://www.cnblogs.com/JustRun1983/archive/2012/06/30/2571450.html,如需转载请自行联系原作者

相关文章
|
1月前
|
JavaScript 前端开发
隐式创建
【9月更文挑战第04天】
24 3
|
11月前
|
编译器 C++
46 C++ - 非自动继承的函数
46 C++ - 非自动继承的函数
34 0
默认移动构造、默认移动赋值自动生成的条件
默认移动构造、默认移动赋值自动生成的条件
140 0
|
JSON JavaScript 开发工具
对象和接口-2:常见用法
本实验将介绍TypeScript中的对象类型的常见用法
127 0
对象和接口-2:常见用法
|
Java 程序员 PHP
C++的对象与类的含义
C++是一门面向对象的编程语言,理解C++需要掌握类(class)和对象(object)这两个概念。 C++ 中的类(Class)可以看做C语言中结构体(Struct)的升级版。结构体是一种构造类型,可以包含若干成员变量,每个成员变量的类型可以不同;可以通过结构体来定义结构体变量,每个变量拥有相同的性质。例如: #include <stdio.h> //定义结构体 Student struct Student{ //结构体包含的成员变量 char *name; int age; float score; }; //显示结构体的成员变量 void displ
57 0
|
消息中间件 缓存 数据库
A和B接口同时修改table字段,无法确认调用顺序
在互联网应用开发中,经常会碰到多个接口同时需要修改数据库表字段的情况。然而,由于无法确认接口调用的顺序,可能会导致数据冲突和一致性问题。本文将介绍一种解决这一问题的方法,通过合理的设计和技术手段,确保同时修改table字段的操作能够顺利进行,数据一致性得到保障。
126 0
A和B接口同时修改table字段,无法确认调用顺序
|
Java 编译器
深入探索: 对象构造的隐藏功能与技巧
深入探索: 对象构造的隐藏功能与技巧
93 0
|
编译器 C++
C++类中默认生成的函数
C++类中默认生成的函数
166 0
|
存储 Kotlin
【Kotlin】属性 与 幕后字段 ( 属性声明 | 属性初始化器 | 属性访问器 | field 属性幕后字段 | lateinit 延迟初始化属性 )
【Kotlin】属性 与 幕后字段 ( 属性声明 | 属性初始化器 | 属性访问器 | field 属性幕后字段 | lateinit 延迟初始化属性 )
217 0
【Kotlin】属性 与 幕后字段 ( 属性声明 | 属性初始化器 | 属性访问器 | field 属性幕后字段 | lateinit 延迟初始化属性 )
|
Java
Java中父类和接口或接口和接口中出现同名属性或同名同参数方法时,如何区分(全文干货)
Java中父类和接口或接口和接口中出现同名属性或同名同参数方法时,如何区分(全文干货)
451 0