我是初学者,请教大家一个问题:
现在写程序的时候,老师会经常说我们继承这个接口或者实现接口什么的,问题是 接口不是抽象类吗,它里面的方法不都是抽象方法(我理解就是只有一个方法名,里面没有任何功能) 这样的方法不就相当于空吗?我们这么调用有什么用呢? 我的理解哪里有问题,希望大家帮我一下
接口是接口
抽象类是抽象类
接口只包含了要实现的功能描述,即规则规范
抽象类则是有部分代码是包含业务逻辑或实现,部分业务如何实现由子类来确定
继承接口是一种不太规范的说法,正确地说法是继承/派生类,以及实现接口。
接口和抽象类不同,编译器会将抽象类和派生类的代码组合起来变成混合体,但是接口其实就是一个标记而已。编译器不会为接口产生任何实质的代码。因此接口也不能包含任何代码逻辑。这也是为什么可以实现很多接口而不能从多个类继承的原因。
除了楼上说的我再补充一点,之所以使用实现接口的方式来进行设计,主要是发挥面向对象中的多态的作用,从而可以实现程序设计中的解耦合
举个例子,假设你是汽车制造商,不同的车的油箱是不一样的(大汽车,小汽车。。。),但是加油站只提供油,并不会为每一种车设计一种加油装置,所以他们只提供了一个接口大小。一般,所有的车都要加油,不管大车还是小车都必须加油。因此,为了实现加油这个动作,你必须根据自己的油箱大小和加油站给定的接口的大小设计一种加油孔,以此来实现正常加油这个过程!这就是接口的实现! 但是,某一天,你要设计一辆国国内外两用的车子,国外的加油孔和我们的不一样,但是也要加油,怎么办呢?于是,他们根据国外加油站给定的接口的大小设计了一种一头大,一头小的接口,套着加油站的接口和加油孔来实现加油,这个专门设计的加油装置标准就是加油站的接口的延伸!这就是接口的继承!
不知道你看到这里是否明白了!加油站给的接口的大小并不是实际的东西,只是一个标准而已,大家为了要加油,只能实现这个标准;但是,有时候这个标准很旧了,我们自己设计一个以加油站标准为基准的,更加全面的标准!但是设计出来的也只是标准而已,这就是接口的继承!
至于加油站的真正的加油装置和后来设计出来的加油装置你就不用管了,这不是你考虑的问题,你的身份是汽车制造商,请记住!
再然后,接口是接口,类是类,两者是不一样的东西,是**并列**的!抽象类是类的一种,我想你应该明白了接口不是抽象类了吧!!!只是说接口里面都是抽象方法,这一点和全部都是抽象方法的抽象类不谋而合而已,个人认为两者没有必然的联系!
我不赞成拿现实中的接口什么的来比方。本质上说抽象类中的抽象函数,也是一种接口。
把接口和现实中的接口联系起来,抽象类用于接口怎么解释?应该从语法本身来理解。接口实现了编译器对方法的检查和绑定,抽象类允许包含实现,并且实实在在用到了继承。
其实当你写程序见的多了,自然就理解了。
面向接口编程是现在非常常用的一种编程思想,尤其是在团队开发中。
接口相当与对任务要求的一个高度抽象、概括,形成一个总体的架构(就像一本书的目录一样,写书的人一般都是先确定一个整体的章节目录,然后开始码字,当然之后的过程可能会对目录稍作修改)
接口类可以把上层调用和底层实现隔离开,所谓的高内聚、低耦合。可以让开发人员集中自己的功能模块。
比较理想的软件编码是先确定接口(确定规则、业务),然后填充代码,当然是理想状态,现实中还有很多其他问题的。
你说的接口里方法是空,调用有什么用,这个就用到多态的一个了。接口的引用可以指向实现接口类的实例(接口类 接口引用 = new 实现接口的类),调用的方法其实是实现接口的类中的方法(所以实现一个接口就要实现所有接口方法)。