接口怎么实例化?

最开始看到数据库连接的时候忽然想到这个问题:

    Connection con=null;try {Class.forName(Driver);} catch (ClassNotFoundException e) {e.printStackTrace();}try {con=DriverManager.getConnection(url, user, pass);} catch (SQLException e) {e.printStackTrace();}

Connection是java中的一个接口,但是使用的时候是这样的:
Connection con=DriverManager.getConnection(url, user, pass);而且方法getConnection的返回类型是Connection类型。也是接口类型?
接口不是不能实例化吗?为什么能实例化,而且,接口里面的方法不是没有方法实现吗?为什么能够直接调用con.Close()等等的方法。

 

接口不能直接new,但是它可以作为别的类的变量。如果有类实现了这个接口,则可以new!

举一个简单的例子:java.lang.List是一个接口,但是List list=new ArrayList();是没有任何错误的,因为ArrayList实现了List接口。

这样来回答吧,为什么父类的引用能指向子类对象呢?

父类定义了子类中一定存在的方法和属性。

同理,接口的引用指向他的实例化对象也是因为实例化对象中必然要实现接口中定义的方法和属性。

对象的类型还是new出来的类型,或方法返回的类型

(如DriverManager.getConnection(String a,String b,String c)静态方法返回Connection接口的实例化对象)。

也可以这样写:

Connection conn =new XXX ()

XXX为实现Connection接口的类。

只不过引用(变量名)如conn只能调用接口定义的方法(这也是接口的意义之一)

 

DriverManager.getConnection 返回的是接口的一个实现,是实现类,这个类已经实现了Connection这个接口,

但是getConnection方法里面就已经转换了类型,转换成Connection类型。但是Con这个实例实际上还是指向实现类的实例。不过这个实例只能调用接口有的方法

 

一位网友的回答挺好的:

小霸王游戏机应该玩过吧,接口(Connection)就像是插游戏卡的插槽,它事先弄好了各种方法(con.close),但是具体实现没有写进去。 
这时候 类就像是游戏卡(你get到的对象)一样,它的方法和插口一样,但是它还写了这些方法是如何实现的。 于是我们把游戏卡(你get到的对象)插到游戏机的插槽(connection)上,就可以玩游戏啦。 游戏机可不知道游戏卡的具体实现是什么,但是它知道插槽有什么方法,直接调用插槽的方法(con.close)就行,
因为插槽上插着游戏卡,就会调用游戏卡的该方法。

 

转载于:https://www.cnblogs.com/alsf/p/6685607.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css中基线指的是哪一条线,如何设置基线网络_CSS, Vertical Rhythm 教程_W3cplus

首先,当谈到排版,我们先要了解基线是什么?维基百科是这样定义)的:在排版和书法中,基线是以字终sit底线为基础,并且向两边延伸的直线。好极了,但我为什么要忽视他呢?好希望你充满激情…

libvirt里的面向对象的C语言

C语言:类的声明和定义 1 // 通用父类的定义2 struct _virClass {3 virClassPtr parent;4 5 unsigned int magic;6 char *name;7 size_t objectSize;8 9 virObjectDisposeCallback dispose; 10 }; 11 typedef struct _virClass virClass; 12 typ…

使用JGroups进行ElasticMQ消息复制

ElasticMQ是一台消息服务器,具有Scala,Java和与Amazon SQS兼容的接口。 它通过跨服务器群集复制消息来支持有保证的消息传递,并通过日志记录实现消息持久性。 消息复制是ElasticMQ的核心功能之一。 但是,如果您看一下代码&#xf…

ajax省市二级联动硬编码,AJAX请求接受硬编码的JSON,但不接受软编码

这个AJAX请求返回'成功'如果PHP中的输出被复制并粘贴了JSON,但是'失败'如果它是由文件生成的。看看下面api.php中的评论,看看我的意思。$.aj…

Fiddler高级技巧 - 映射路径到本地文件夹

适用场景: 你是前端开发人员,要开发一个小模块,需要用到线上的环境(账号、数据、跨域等),但你又没有权限往线上传文件你是移动测试人员,需要将一组接口的返回结果替换为另一组,最简单…

Spring Social入门

像我一样,无论是添加简单的Facebook“赞”按钮,一大堆“共享”按钮还是显示时间轴信息,您都不会注意到当前对应用程序“社交化”的热衷。 每个人都在做这件事,包括Spring的家伙,事实上,他们提供了一个称为S…

apache ajax 跨域访问,Apache 实现AJAX跨域请求

当使用ajax跨域请求时,浏览器报错:XmlHttpRequest error: Origin null is not allowed by Access-Control-Allow-Origin.肯定是跨域的问题,如果用jsonp或者pro更多:当使用ajax跨域请求时,浏览器报错:XmlHtt…

14、数据库

数据库转载于:https://www.cnblogs.com/quyong/p/6687924.html

EhCache复制:RMI与JGroups

最近,我正在研究一种需要复制缓存的产品。 缓存提供程序已经确定-EhCache,剩下的就是有关传输的问题。 哪一个是最佳选择? 这里的最佳选择是指性能更好的选择。 仅在两个可用传输之间进行了性能评估-JGroups和RMI,对其他传输不予考…

Oracle 监控语句整理(包括TOP SQL等)

希望能对大家有所帮助! 很多时候大家想查看oracle数据库中的sql语句执行情况,但是又不知道如何是好,今天在这里为大家提供一个sql语句,大家可以通过以下的sql语句查询Oracle数据库中Top Sql情况: 查询结果可按照PCT、总…

服务器wifi无线放大器,一回家WiFi信号太弱?教你用两毛钱制作信号放大器

原标题:一回家WiFi信号太弱?教你用两毛钱制作信号放大器现在家家户户都有无线路由器,但是大部分人都还是早期的单天线产品,信号覆盖范围比较小,特别是穿墙性能不行。人在客厅WiFi信号还满格,一到卧室就瞬间…

iOS开发 之 可穿戴设备 蓝牙4.0 BLE 开发

1 前言 当前有越来越多的可穿戴设备使用了蓝牙4.0 BLE(Bluetooth Low Energy)。对于iOS开发而言,Apple之前专门推出CoreBluetooth的Framework来支持BLE的开发。对于硬件开发有了解的朋友应该知道,在之前使用低版本的蓝牙的设备,要…

将Java服务公开为Web服务

本教程解决了开发人员面临的最实际的情况。 大多数时候,我们可能需要将某些现有服务公开为Web服务。 在项目生命周期的不同阶段可能会遇到这种情况。 如果这是初始阶段,那么您几乎是安全的,您可以为此做好充分的准备。 但是,将要发…

git服务器维护 备份,gitlab服务运维,备份与恢复 - 橙子柠檬's Blog

gitlab服务运维工作Gitlab-ctl 使用gitlab-ctl start #启动服务gitlab-ctl stop #停止服务gitlab-ctl restart #重启服务检查服务的日志信息gitlab-ctl tail redis #检查redis的日志gitlab-ctl tail postgresql #…

angular js实现开关效果

功能:实现点击排序,再点击排倒序。 实现方法如下 方法一:定义变量实现点击切换true或false,代码为: $scope.lidata [ {"name":"Terry","age":12}, {&qu…

使用TestNG的弹簧测试支持

TestNG是一个测试框架,旨在涵盖所有类别的测试:单元,功能,端到端,集成等。 它包括许多功能,例如灵活的测试配置,对数据驱动测试的支持(使用DataProvider),强大…

Entity Framework - 理清关系 - 基于外键关联的单向一对一关系

注:本文针对的是 Entity Framework Code First 场景。 之前写过三篇文章试图理清Entity Framework中的一对一关系(单相思(单向一对一), 两情相悦(双向一对一), 两情相悦-续),但当时理…

微信社交小程序服务器,Day12-微信小程序实战-交友小程序-搭建服务器与上传文件到后端...

要搞一个小型的cms内容发布系统因为小程序上线之后,直接对数据库进行操作的话,慧出问题的,所以一般都会做一个管理系统,让工作人员通过这个管理系统来对这个数据库进行增删改查微信小程序其实给我们提供了这样的能力了(也就是可以…

java go

熟练掌握java技术,对多线程、数据结构有清晰的认识; 熟悉MySQL/Oracle数据库,熟悉关系数据库应用设计开发; 熟悉Spring/MyBatis/Freemarker等一种或者多种框架; java基础扎实,熟练掌握目前主流的开源框架&a…

了解如何解决OSGI捆绑包

我想回顾一下OSGI包如何解决并使用Apache Karaf进行演示。 Karaf是基于Apache Felix内核的功能齐全的OSGI容器,并且是Apache ServiceMix集成容器的基石。 对于第一部分,我将讨论OSGI框架如何解决捆绑包。 在第二部分中,我将使用Apache Karaf演…