java为什么要设计interface,是为了尽可能替代类的继承吗?

諾壓壓壓壓壓最有愛的說丶


interface是接口的意思。接口意味着一种契约,相对于类而言接口的抽象程度更高。接口更多的是抽象出统一的行为,是约定;而类的继承是复用,两者的功能和定位有区别,是互补的。

接口定义了某些行为,而实现某个接口就必须实现这些行为。换句话说,某个类实现了接口,就必定具备接口所约定的功能。这样的话,我们就可以采用面向接口编程的方式进行设计。我们看不到具体的类的实现,也不需要看到。我们只需要看到接口就可以了,然后就可以根据接口所提供的功能进行调用。

更具体的推荐看下java 编程思想。


程序员术与道


你好,你的问题包含了两个小问题,①java设计interface的原因?②是不是为了尽可能替代类的继承?

接口与继承分别是什么?(定义)

接口是一系列方法的声明,比如方法名、参数、返回值等信息,接口中的方法不实现,这些方法可以在不同的地方被不同的类实现。

继承就是子类继承父类的特征和行为,使得子类具有父类的实例域和方法。

接口与继承的设计原因是什么?(用处)

接口的主要作用在于降低代码的耦合度,屏蔽实现层,比如前后端接口交互的时候,大家约定好接口层就可以互不影响的干活了,至于接口实现后端可以慢慢做。

继承的主要作用在于,在已有基础上继续进行功能的扩充①清晰体现相关类间的层次结构关系②减小代码的冗余度,大大增加程序的重用性。

接口与继承有什么区别?

①定义的修饰符不同(interface),(extends)

②接口中只能定义全局常量和抽象方法,而在继承中可以定义属性方法,变量,常量等。

③接口被类实现时,在类中一定要实现接口中的所有方法,而继承可以调用指定方法。

④继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了 。

综上所述,java中接口与类继承各有自己存在的原因,有自己的适用场合,有区别也有一定的联系,可以根据自己的具体需求来选择。


IT牛哥


明显不是。你的问题本质是面向对象的问题,我当年上大学,只知道书中说有好处,但也没搞明白到底哪里好了。工作几年才彻底明白。

如果你明白接口和类的本质区别,这个问题就自然明白了。类是一个范畴的东西,你是一个人,还是一个动物,是一个具体的什么动物,猫还是狗,这就是类。顶层的动物是抽象的东西,而底层的猫啊狗啊是具体的东西。也就是说类是属于某个范畴的东西,这个范畴相对明确,虽然也有一定的抽象。

而接口呢,是一个标准,一个规范,实现了这个接口,就意味着肯定有了相应的功能。这就是我们经常提到的实现一个接口,必须要实现接口中的所有方法。怎么理解呢?我不管你属于什么类,猫啊,狗啊之类的,你只要实现了我的alive(活着)接口,我就知道你肯定有吃eat(),喝drink(),拉crap,撒pee()这些方法。接口不关系你是什么类,它关心的是只要是实现了这个接口,肯定会实现接口中的方法,也就是说有了相应的功能。

说了这么多,在具体实践中如何运用呢?我举个实际例子来说吧,JDBC驱动,数据库有好多种,mysql,oracle,等等,那么作为程序员连接不同的数据库,是不是写的代码不一样呢?比如连接mysql用方法connectMysql()而连接oracle用方法connectOracle?这时候,接口的作用就体现出来了。我刚才说,接口是一种规范,一种标准,那么我定义一系列的接口,别管你什么mysql,oracle之类,要连接数据库,都需要实现我定义的接口,并实现connect方法;包括取数据库之类的,也是一样的。用接口来处理这种标准,不管具体的数据库是什么。

在看看jdk自身的类,HashMap和HashTable,他们不是一个范畴:一个是Map,一个是Dictionary,但是他们都实现了Map接口,所以他们的功能或者能力基本相同。

那么回到你的 问题本身,类继承干嘛用的呢。其实这源于一种设计思想:面向抽象编程,比如我刚才提到的,你的程序中有狗,猫,还有 人这些类,他们肯定有相识的东西,你如果面向具体编程,那么猫和狗肯定有些功能或者代码是重复的,比如吼叫bellow(),那么完全可以抽象出来,把bellow这个方法放到猫和狗的父类,避免代码重复或者耦合,你要考虑如果有100个猫或者狗之类的类,如果不 放到父类中,修改这个bellow方法可能涉及100个类。

仔细琢磨琢磨吧,我也是思索了好多年才体会出来的。让你写一个程序,如果你能熟练且正确运用接口,类,继承等,说明你真的有了面向对象思想了。


分享到:


相關文章: