java 实现接口和继承有啥区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 实现接口和继承有啥区别相关的知识,希望对你有一定的参考价值。
首先的话,在 Java 中应该说“扩展”(extend)而不是“继承”(inherit),尽管知道它实现上就是C++那种继承,但逻辑上是不完全相同的。再考虑到接口即协议,对接口的扩展,或是说对协议的扩展,实际上就包括了对其公用方法的扩展以及对其定义的扩展两个方面,其中扩展接口定义实际上即为对协议添加更多的约束,在减少了其可能包含的类的种类的同时也给了这些类更清晰的定义,也就允许用户基于这更清晰的定义做出更多的操作了。
所以呢,实际类的扩展实际上和继承是相同的,子类确实继承了父类的实现,但接口的扩展则只会获取到父接口的方法声明,继承的意味并不明显,更多的实际上在于对其原协议的扩展,因此应将子接口和父接口间的关系视为扩展而不单单是继承
其实就是多去思考为什么在Java这叫扩展不叫继承,很多问题就迎刃而解了 参考技术A 1、java类可以一次继承多个接口,用implements 接口1,接口2;
2、如果是接口继承接口的话也可以用extends,接口是多继承的,java类才是单继承;
3、接口继承接口可以不实现父接口中的方法,可以声明自己的新方法;
4、类实现接口时,一定要实现接口中声明的方法,如果接口中没有定义抽象方法则不需要,但是要注意,类实现了一个接口A,如果B是A的父接口,且B中有抽象方法,则该类必须实现A和B中的所有抽象方法;
5、抽象方法只能定义在抽象类中,抽象类实现接口,可以不实现接口中的抽象方法。 参考技术B 1,一个类只能继承一个类,但是可以实现多个接口。
2,依赖倒转原则: 依赖抽象(例如接口),不要依赖于实现。
3,合成/聚合复用原则(CARP): 尽量使用合成/聚合,而不是继承关系达到复用的目的。
4,接口传达的意思是:拥有某种功能,能干嘛,比如:Serializable代表可序列化的。
5,继承传达的是意思是:is-a,比如:猫 是一个 动物,猫就是动物的子类。本回答被提问者和网友采纳 参考技术C 继承除了抽象方法还有普通方法,接口只有抽象方法
继承的成员变量无限制,接口的成员变量必须是常量,即用public static final修饰
继承有构造方法,但不能进行实例化,接口没有构造方法
继承只可以单继承,接口可以多实现
C# 中的 Icompare 接口和 IComparable 接口有啥区别??
还有 Icompare<T> 接口和 IComparable<K,V> 接口有什么区别??
高手请多多指教,
谢谢!!
我还想问:
ICompare 可以实现一个类的不同属性之间的分类比较,而且IComparable也可以实现呀?
难道他们只是带的参数不同而已吗??
1、ICompare可以带两个参数,可以通过自己写enum或者switch等来实现一个类的不同属性之间的分类比较,对用户来说可以进行选择。它使用的是:IComparer.Compare
// IComparer impl.
int IComparer.Compare(object o1, object o2)
Car t1 = (Car)o1;
Car t2 = (Car)o2;
return String.Compare(t1.PetName, t2.PetName);
2、IComparable是system.collection 中默认的方法;使用CompareTo方法:
// IComparable implementation.
int IComparable.CompareTo(object o)
Car temp = (Car)o;
if(this.CarID > temp.CarID)
return 1;
if(this.CarID < temp.CarID)
return -1;
else
return 0;
3、但是在public class Car : IComparable时,sort方法只能是对一个Car属性进行排序(这是sort的默认方法,它有三个override方法),比如car有id和petName两个属性,此时只能选择一个来排序。而ICompare则可以通过写enum等代码来实现带参数的排序(参数为enum类型),参数指定了以id排序或者以petName排序。
不清楚为什么微软要写两个接口,干吗整合呢?继续学习它……
你看明白了吗?希望对你有帮助呀
以上是关于java 实现接口和继承有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
java中继承extends和emplments实现有啥区别?具体在用法上?