`
yuanlanxiaup
  • 浏览: 896184 次
文章分类
社区版块
存档分类
最新评论

Interface与Abstract class的异同

 
阅读更多
1.相同及联系
A.两者都是抽象类,都不能实例化。
B.interface实现类及abstrctclass的子类都必须要实现已经声明的抽象方法。

2.不同
A.interface需要实现,要用implements,而abstractclass需要继承,要用extends。
B.一个类可以实现多个interface,但一个类只能继承一个abstractclass。
C.interface强调特定功能的实现,而abstractclass强调所属关系。
D.尽管interface实现类及abstrctclass的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration,没有方法体),实现类必须要实现。而abstractclass的子类可以有选择地实现。这个选择有两点含义:
一是Abastractclass中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子类必须实现。那些没有abstract的方法,在Abstrctclass中必须定义方法体。
二是abstractclass的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以通过再次声明其方法为抽象的方式,无需实现,留给其子类来实现,但此类必须也声明为抽象类。既是抽象类,当然也不能实例化。
E.abstractclass是interface与Class的中介。
interface是完全抽象的,只能声明方法,而且只能声明pulic的方法,不能声明private及protected的方法,不能定义方法体,也不能声明实例变量。然而,interface却可以声明常量变量,并且在JDK中不难找出这种例子。但将常量变量放在interface中违背了其作为接口的作用而存在的宗旨,也混淆了interface与类的不同价值。如果的确需要,可以将其放在相应的abstractclass或Class中。
abstractclass在interface及Class中起到了承上启下的作用。一方面,abstractclass是抽象的,可以声明抽象方法,以规范子类必须实现的功能;另一方面,它又可以定义缺省的方法体,供子类直接使用或覆盖。另外,它还可以定义自己的实例变量,以供子类通过继承来使用。

3.interface的应用场合
A.类与类之前需要特定的接口进行协调,而不在乎其如何实现。
B.作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。
C.需要将一组类视为单一的类,而调用者只通过接口来与这组类发生联系。
D.需要实现特定的多项功能,而这些功能之间可能完全没有任何联系。

4.abstractclass的应用场合
一句话,在既需要统一的接口,又需要实例变量或缺省的方法的情况下,就可以使用它。最常见的有:
A.定义了一组接口,但又不想强迫每个实现类都必须实现所有的接口。可以用abstractclass定义一组方法体,甚至可以是空方法体,然后由子类选择自己所感兴趣的方法来覆盖。
B.某些场合下,只靠纯粹的接口不能满足类与类之间的协调,还必需类中表示状态的变量来区别不同的关系。abstract的中介作用可以很好地满足这一点。
C.规范了一组相互协调的方法,其中一些方法是共同的,与状态无关的,可以共享的,无需子类分别实现;而另一些方法却需要各个子类根据自己特定的状态来实现特定的功能。
分享到:
评论

相关推荐

    java面试宝典

    29、abstract class 和interface 有什么区别? 10 30、Static Nested Class 和Inner Class 的不同? 11 31、java 中会存在内存泄漏吗,请简单描述。 11 32、abstract 的method 是否可同时是static,是否可同时是native...

    java笔试题

    1、面向对象的特征有哪些方面?...23、抽象类(abstract class)和接口(interface)有什么异同? 24、静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同? 25、Java 中会存在内存泄漏吗,请简单描述。

    简述抽象类和接口的区别-java接口和抽象类异同.docx

    public abstract class Animal { public void eat() { // 公共实现 } public void sleep() { // 公共实现 } public abstract void makeSound(); } ``` 子类如 `Bird` 和 `Fish` 继承 `Animal` 并实现 `...

    Java 接口和抽象类区别

    这篇文章将深入探讨Java接口与抽象类的异同,并通过实际例子来阐述它们在实际开发中的应用。 首先,接口是Java中一种完全抽象的类型,它只包含方法声明,不包含方法实现。这意味着任何实现接口的类都必须提供这些...

    java中接口与抽象类的详细分析与比较

    在Java编程语言中,接口(Interface)和抽象类(Abstract Class)都是用于实现多态性的关键概念,它们各自有特定的用途和优缺点。本文将深入探讨这两种概念,帮助你理解它们之间的区别以及如何在实际开发中选择使用...

    C#题目(工作笔试面试、考证)

    1、abstract class 和 interface 有什么区别? 答:声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。接口...

    C#.Net中类与结构的区别

    1. **值类型与引用类型** - **结构(Struct)** 是值类型,它们在程序的堆栈上分配内存。这意味着当你创建结构的实例或传递它时,会复制整个结构的数据。这提供了快速的访问速度,但因为堆栈空间有限,不适用于大型...

    JAVA面试资料大全-整理.zip

    8、 abstract class 和 interface 有什么区别 9、 String、StringBuffer、StringBuilder 的区别 10、 同步和异步有何异同,在什么情况下分别使用他们?举例说明。 .............................................. ....

    Java语言的接口与抽象类

    其次,抽象类(Abstract Class)是包含抽象方法的类,使用`abstract`关键字声明。抽象类的特点: 1. 抽象方法:抽象类可以包含抽象方法(只有签名,无实现),也可以包含具体方法。 2. 继承:抽象类只能被继承,不能...

    详细对比php中类继承和接口继承

    在这个例子中,`AbstractClass` 是抽象类,`ConcreteClass` 是它的子类,必须实现 `doSomething()` 抽象方法。 接口和抽象类的异同点: 1. 实现接口使用 `implements` 关键字,继承抽象类使用 `extends` 关键字。 2...

    Java面试宝典2010版

    - **详细解析**:`abstract class`和`interface`都是用于定义模板类的工具,但它们之间存在显著差异。`abstract class`主要用于定义一个基本类的骨架,它可以包含具体实现、抽象方法以及其他成员。`interface`则用于...

    java技术支持面试题

    14. abstract class 和 interface 有什么区别? abstract class 是一个抽象类,interface 是一个接口。 15. heap 和 stack 有什么区别。 heap 是指内存中的堆栈,而 stack 是指方法调用栈。 16. GC 是什么?为...

    ASP.NET面试题目

    37. abstract class与interface:abstract class可包含实现,interface仅声明方法。 38. 线程启动:使用`Start()`启动线程。 39. 接口继承接口、抽象类实现接口、抽象类继承实体类:都是可以的。 40. 构造器不可...

    Java问题宝典2012版

    24、abstract class和interface有什么区别? 18 25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 20 26、什么是内部类?Static Nested Class 和 Inner Class的不同。 20 27、...

    Java面向对象高级编程笔试考试题.doc

    5. abstract class(抽象类)和 interface(接口)有什么异同点? 抽象类和接口都是抽象的,但是它们有着不同的用途。 * 抽象类可以定义抽象方法和非抽象方法,可以有构造方法,子类可以继承抽象类。 * 接口只能...

    java 面试常问的问题 如何回答

    24、abstract class和interface有什么区别? 17 25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 18 26、什么是内部类?Static Nested Class 和 Inner Class的不同。 19 27、...

    java基础知识大全

    #### abstract class与interface的区别 - **abstract class**: - 可以包含抽象方法和具体实现。 - 支持多属性,可以有构造函数和实例变量。 - 继承关系:一个类只能继承一个抽象类。 - **interface**: - 只能...

    面向对象重点复习

    public abstract class Shape { public abstract String getName(); } public class Circle extends Shape { @Override public String getName() { return "Circle"; } } public class Rectangle ...

    C#/asp.net面试宝典

    5. abstract class(抽象类)与interface(接口)的不同用途及区别。 6. 启动线程时使用run()和start()的区别。 7. 接口和抽象类如何实现继承关系,以及构造器是否可以被override。 8. String类是否可以被继承,以及...

Global site tag (gtag.js) - Google Analytics