HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    为什么要定义接口(为什么要定义接口而不是直接实现)

    发布时间:2023-03-19 08:59:36     稿源: 创意岭    阅读: 150        问大家

    大家好!今天让创意岭的小编来大家介绍下关于为什么要定义接口的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等

    只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端

    官网:https://ai.de1919.com

    本文目录:

    为什么要定义接口(为什么要定义接口而不是直接实现)

    一、j2ee项目里面service层里面为什么要建立一个接口,一个实现类

    分别定义接口和实现类是java架构思想中开闭原则的体现,对扩展开放,对修改关闭。举个例子:假如你这个注册刚开始是对国内用户开放,中国用户注册成功返回“注册成功”,随着业务扩展,需要海外用户开放,假如美国用户返回“register success”,如果你有接口,可以再美国的AmericaUserServiceImpl.java中实现一个UserService.java的接口,来定义美国用户的注册业务,而不是在之UserServiceImpl.java中增加if else来对不同逻辑进行处理,这样,后续如果某个地区的注册业务有变动,只需要修改对应地区的实现类,修改不会影响到其他地区的实现类,降低了耦合性。

    对于小型项目来说,确实可以不用多写一个接口,直接写实现类就可以了。接口+实现类是一种良好的编码习惯而已。就好像写代码时候的缩进和驼峰命名法。

    二、Java中的接口可以定义成空接口吗?如果可以,那为什么要定义成空接口?

    Java中的接口可以定义成空接口吗?

    答:可以

    如果可以,那为什么要定义成空接口?

    答:可以起一个标记作用,既是像楼上说的Serializable一样,它标志这个类可以被序列化而已.

    可以通过这个标记接口来判断某个类是否可以实现某种功能.

    具体判断方法如下

    假设类A存在,标志接口Mark

    if(Mark.class.isAssignableFrom(A.class)){....}

    if(Mark.class.isInstance(new A())){....}

    三、什么是接口?接口的主要功能是什么

    是指同一计算机不同功能层之间的通信规则称为接口。

    主要功能是:对协定进行定义的引用类型。其他类型实现接口,以保证它们支持某些操作。接口指定必须由类提供的成员或实现它的其他接口。与类相似,接口可以包含方法、属性、索引器和事件作为成员。

    为什么要定义接口(为什么要定义接口而不是直接实现)

    扩展资料

    Java里的接口:

    Java里面由于不允许多重继承,所以如果要实现多个类的功能,则可以通过实现多个接口来实现。

    Java接口和Java抽象类代表的就是抽象类型,就是我们需要提出的抽象层的具体表现。OOP面向对象的编程,如果要提高程序的复用率,增加程序的可维护性,可扩展性,就必须是面向接口的编程,面向抽象的编程,正确地使用接口、抽象类这些太有用的抽象类型做为java结构层次上的顶层。

    Java接口和Java抽象类最大的一个区别,就在于Java抽象类可以提供某些方法的部分实现,而Java接口不可以,这大概就是Java抽象类唯一的优点吧,但这个优点非常有用。

    四、c#中为什么要用接口

    你要把接口也理解成一种类,比如有个基类叫baseClass,一个继承他的类叫subClass,那么subClass也算是baseClass类型的,可以有这样的写法baseClass bc=new subClass()

    接口也是一样,如果一个类MyClass实现了借口一个接口interfaceClass,你事实上可以把MyClass叫做interfaceClass的子类,可以有这样的写法interfaceClass ic=new MyClass()

    这就是所说的多态的一部分基础。可以举个实在点的例子,比如你想写一个方法叫EnumAll,参数是一个类的实例,作用是例举出该实例中的每个子元素并打印出元素的ToString(如窗体的子元素是窗体中的控件,数组的子元素就不用说了吧),你就遇到两个问题

    首先EnumAll参数的类型是什么。参数应该可以是一个Form类型,因为窗口中有很多控件,使用EnumAll和一个Form的实例做参数可以打印出包含在该参数窗体中的每个控件的名字;但是一个数组Object[]类型应该也可以使用EnumAll方法,EnumAll可以列举Object[]中的每个元素并打印。你是要把方法写成void EnumAll(Form e)还是写成void EnumAll(Object[] e)?

    然后就是EnumAll怎样实现才能得到不同类型的实例的子元素?如果是void EnumAll(Form e)的形式,要想得到子元素要用

    foreach(Control c in e.Controls)

    {

    Console.WriteLine(c.ToString());

    }

    的写法,如果数组要用

    for(int i=0;i<e.length;++i)

    {

    Console.WriteLine(e[i].ToString());

    }

    的实现方法。

    Form和Object[]是两种完全不沾边的类型,那么EnumAll到底该怎么写?

    这时就可以使用接口,可以定义一个接口

    interface IEnumable

    {

    Object next();//返回下一个子元素的方法

    }

    然后使Form和Object[]类型都实现IEnumable接口(实现方法是不同的,如前面所说),然后这样写EnumAll方法:

    void EnumAll(IEnumable e)//一开始就说了,实现接口的类都可以算是接口的子类

    {Object o;

    while((o=e.next)!=null)

    {

    Console.WriteLine(o.ToString());

    }

    }

    于是解决了上面的问题。

    不知道有没有说清楚,如果理解了上面举的例子算是初步了解接口了,接口的多继承和多态性还有很多内容。

    另外,上面的东西只是举例子,虽然C#中确实有IEnumable接口,但其定义要复杂的多,我只是举个简化的自己编的例子^_^。C#的(应该说是FCL吧)很多类都实现了IEnumalbe接口,像集合类和数组等。

    FCL是.NET框架类库,Framework Class Library,不论在C#,J#,VB.NET或其他.NET开发语言中使用的.NET提供的类都是FCL中的类,就是说,.NET的开发其实是和语言无关的。不同语言编写的程序由于使用同一类库(其实等于被翻译成了同一种中间语言,Common Intermediate Language, CIL),使得各种不同语言写的程序集可以通用。

    以上就是关于为什么要定义接口相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    为什么现在烂梗越来越多

    为什么很多人喜欢学化学(为什么很多人喜欢学化学专业)

    微店显示请联系买家微信认证(微店买家为什么要身份验证)

    手机锁屏再开启有广告(手机锁屏再开启有广告怎么取消)

    王者荣耀竞猜币(王者荣耀竞猜币会清空吗)