Technical difference between abstract class and interface

This question already has an answer here:

  • What is the difference between an interface and abstract class? 32 answers

  • Read here http://javarevisited.blogspot.kr/2013/05/difference-between-abstract-class-vs-interface-java-when-prefer-over-design-oops.html

    Difference between abstract class and interface in Java

    Abstract Class vs Interface in Java and When to use them over otherWhile deciding when to use interface and abstract class, it's important to know difference between abstract class and interface in Java. In my opinion, following two differences between them drives decision about when to use abstract class or interface in Java.

    1) Interface in Java can only contains declaration. You can not declare any concrete methods inside interface. On the other hand abstract class may contain both abstract and concrete methods, which makes abstract class an ideal place to provide common or default functionality. I suggest reading my post 10 things to know about interface in Java to know more about interfaces, particularly in Java programming language.

    2) Java interface can extend multiple interface also Java class can implement multiple interfaces, Which means interface can provide more polymorphism support than abstract class . By extending abstract class, a class can only participate in one Type hierarchy but by using interface it can be part of multiple type hierarchies. Eg a class can be Runnable and Displayable at same time. One example I can remember of this is writing GUI application in J2ME, where class extends Canvas and implements CommandListener to provide both graphic and event-handling functionality..

    3) In order to implement interface in Java, until your class is abstract, you need to provide implementation of all methods, which is very painful. On the other hand abstract class may help you in this case by providing default implementation. Because of this reason, I prefer to have minimum methods in interface, starting from just one, I don't like idea of marker interface, once annotation is introduced in Java 5. If you look JDK or any framework like Spring, which I does to understand OOPS and design patter better, you will find that most of interface contains only one or two methods eg Runnable, Callable, ActionListener etc.

    I haven't included all syntactical difference between abstract class and interface in Java here, because focus here to learn when to use abstract class and interface and choosing one over other. Nevertheless you can see difference between interface and abstract class to find all those syntactical differences.

    Read more: http://javarevisited.blogspot.com/2013/05/difference-between-abstract-class-vs-interface-java-when-prefer-over-design-oops.html#ixzz31l59K92Z


    you are free to choose interface or abstract class in the above scenario

    but keep below things in mind

    if you made a fully abstract class then

    your subclass will extend one class to implement that behaviour and its not eligible to extend any other class as multiple inheritance is not supported in java.

    see without interface we cant achieve multiple inheritance .

    Now if we approach interface instead of fully abstract class

    then class can implement it and still eligable for extension of one more class.

    so choose fully abstract class in your design if your sub classes can never need to extend any other class.

    if sub classes need to extend some classes later (usually its how we need in application) then choose interface .


    You write a java program with interfaces, abstract class and concrete class but do not mention any constructor, compile it and see byte codes in .class files. You would see as expected abstract class and concrete classes have default constructor added by compiler where as interfaces do not get constructor added to it by compiler. This should help you understand technical differences as I believe you know other differences.

    链接地址: http://www.djcxy.com/p/54260.html

    上一篇: 摘要Vs接口在第三方类

    下一篇: 抽象类和接口之间的技术差异