接口作为返回类型(转载)

返回的类型是接口,但是接口是不能实例化的,但是接口可以声明一个引用,指向其实现类,也就是说,在实际中返回值都是这个接口的实现类的对象。这点就是面向对象的一大特点

我要 接口“I食物链顶端滴男人”,你返回了“贝爷”,这是什么鬼?你能理解么?

可以说这个过程什么都没发生
只不过在方法内部,你可能是任何对象
但是在方法的外部,你获得的对象只能使用那个接口提供的方法,仅此而已

返回类型是接口的讨论

http://bbs.csdn.net/topics/380209722

public static IList<int> a()
{
   b=new List<int>();
   return b;
}

这里不是返回一个List, 而是IList接口是什么意思呢?

=========================================================================

如果你编写一个函数,确定只返回某个类型。那么在选择 返回值 类型的时候,越精确越好。
比如 string string.Replace(string, string),就比object string.Replace(string, string)好。

如果明知你返回的是一个类型,那调用时还要用接口来声明变量,没有意义。但是在这样一种情况下例外(我不想说的不严谨被有些人说,但是的确这种例外的情况你很难遇到):就是这个类显式实现了某个接口,同时你又要使用这个接口的方法,某个场景是,这个类实现了两个不同的接口,这两个接口有方法签名相同但是含义不同的两个方法,因此类显式实现接口。这时候你得指定所用的接口类型而不是返回值类型。

=================================================================================

返回接口一般运用于抽象层。

IList<T>可以理解为女人。
List<T>可以理解你女朋友。
你女朋友可以具有女人这个属性,但是并不是每个具有女人属性的人都是你女朋友。
而厕所就有个明确的定义 符合女人这个定义就可以进女厕所。不符合的就不能进。(当然存在BUG,比如清洁工可能是男的。)
你觉得精确到每一个具体的女人有意义么?

=========================================================================

public static IList<int> a()
{
   b=new List<int>();
   return b;
}

这里返回值类型为:一个IList<T>的泛型接口,这样的目的是让返回的b使用得更广泛,凡是继承了IList<T>接口的类都可以使用b而不会有类型冲突

=================================================================

方法该返回接口还是具体类,以及面向接口编程

http://www.cnblogs.com/kirinboy/archive/2012/03/08/should-method-return-interface-or-concrete-class-and-programming-to-an-interface.html

时间: 2024-10-14 04:55:00

接口作为返回类型(转载)的相关文章

JavaSE8基础 函数的返回类型是接口

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0)        代码: interface Say { public abstract void sayHello(); } class Javaer implements Say{ public void sayHello() { System.out.println("Java Hello"); } } class D

抽象类和接口作为返回值类型的问题

1 /* 2 返回值类型 3 引用类型: 4 类:返回的是该类的对象 5 抽象类:返回的是该抽象类的子类对象 6 接口: 7 */ 8 abstract class Person { 9 public abstract void study(); 10 } 11 12 class PersonDemo { 13 public Person getPerson() { 14 //Person p = new Student(); 15 //return p; 16 17 return new St

C# WebApi之接口返回类型详解

转自:https://www.cnblogs.com/hnsongbiao/p/9375888.html Webapi的接口返回值主要有四种类型 void无返回值 IHttpActionResult HttpResponseMessage 自定义类型 void无返回值 大家都知道void声明的是一个无返回值的方法,声明一个api控制器方法,例如: public class ValuesController : ApiController { [HttpGet] public void Get()

关于java可变(协变)返回类型的解说之一------------基类与派生类

在java代码中,人们惯性的认为一个方法中只能返回一种返回值或者无返回.博主在做开发过程中碰到了这样一种情况,安卓客户端请求数据,后台可能返回两种结果(1)访问令牌失效,无数据返回.(2)正常获取数据. 这样的情况下需要根据访问令牌标识来判断是否有数据返回.当无效时返回用户重新登录提示,正常时则返回数据.显然,返回的结果有两种,那么一个方法里面只能返回一种类型的禁锢使得开发起来略显笨拙.使得开发起来相当难受. 思考良久,又结合C++协变返回类型的启发.摘抄原文中的一句话:在C++中,只要原来的返

Web API 方法的返回类型、格式器、过滤器

一.Action方法的返回类型 a) 操作方法的返回类型有四种:void.简单或复杂类型.HttpResponseMessage类型.IHttpActionResult类型. b) 如果返回类型为void,请求结束后HTTP状态码为204(No Content),如果返回类型为复杂类型,则对象会被转化为Json字符串后传输. c) 从图示的Web API的大致交互过程可以看到,Controll返回的是HttpResponseMessage类型,然后转换为HttpResponse提供给调用端.同时

ASP.NET Web API 2:Action的返回类型

Web API控制器中的Action方法有如下几种返回类型: void HttpResponseMessage IHttpActionResult 其它类型 基于上面几种不同的返回类型,Web API创建HTTP响应消息的机制也不同. 返回类型 Web API创建HTTP响应消息的机制 void 返回HTTP状态码204(无内容) HttpResponseMessage 直接转换成HTTP响应消息 IHttpActionResult 调用接口的ExecuteAsync方法创建一个HttpResp

[经验分享]WebAPI中返回类型JsonMessage的应用

这是一个绝无仅有的好类型,一个你爱不释手的好类型,好了,不扯了,直接上干货. 相信大家都知道,在调用接口的时候返回Json数据已经成为一种不成文的标准,因为它的解析快,易读等优秀的特性,所以被绝大多数的程序猿们所喜爱. 今天就给大家介绍一种您可能忽略或者还不知道的返回类型JsonMessage 1 /// <summary> 2 /// 返回消息 3 /// </summary> 4 public class JsonMessage 5 { 6 /// <summary>

Java返回类型泛型的用法小结

Java返回类型泛型的用法小结 版权声明:本文为博主原创文章,未经博主允许不得转载. 关于Java泛型的基本用法就不多说了,主要是一个编译期的检查,也避免了我们代码中的强制转换,比较经典的用法有泛型DAO,泛型Page的DTO. 现在我要说的是一个挺有趣但是貌似还不是太多的人在代码中使用的方法,前段时间用guava和op4j的时候发现这样的用法,看看了源码,也是很简单的. 比如guava中创建集合的方法 List<xx> list = Lists.newArrayList(),这个代替了我们传

IntelliSense 无法仅由函数的返回类型重装分辨

IntelliSense:无法仅由函数的返回类型重装分辨       d:\programfiles (x86)\microsoft sdks\windows\v7.0a\include\winbase.h         3540 在VS2010下用C语言写Windows系统服务,从还有一个c#的项目中Copy过来一段代码,改动后再编译.就产生了这个错误! 在网上搜索得到的答案是:"无法重载仅按返回类型区分的函数"这样的情况一般仅仅会发生在有同名函数的情况下.可是我那段代码里却没有同