抽象类(Abstract):声明方法的存在而不去实现它的类被称为抽象类(abstract)它用于要创建一个体现某些基
本行为的类,并为该类声明方法,但不能在该类中 实现该类的情况。不能创建 abstract 类的实例。然而
可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或 抽 象 静态方法。 Abstract 类的子类为它们父类中的所有抽象方法提供实现, 否则它们也是抽象类为。 取 而代 之,在子类中实现该方法。知道其行为的其它 类可以在类中实现这些方法。
接口( interface ):是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而
获得。接口 中的所有方法都是抽象的,没有一个有程序体。接口只可以定义 static final 成员变量。接口
的实现与子类相似,除了该实现类不能从接口定义中继承 行为。当类实现特殊接口时,它定义(即将程序
体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有
抽象类,它 允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从
1.相同点A. 两者都是抽象类,都不能实例化。 B. interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。
2. 不同点A. interface需要实现,要用implements,而abstract class需要继承,要用extends。 B. 一个类可以实现多个interface,但一个类只能继承一个abstract class。 C. interface强调特定功能的实现,而abstract class强调所属关系。 D. 尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的 (declaration, 没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现。 这个选择有两点含义: 1):是Abastract class中并非所有的方法都是抽象的,只有那些冠有abstract的方法才是抽象的,子类必须实现。那些没有abstract的方法,在Abstrct class中必须定义方法体。 2):是abstract class的子类在继承它时,对非抽象方法既可以直接继承,也可以覆盖;而对抽象方法,可以选择实现,也可以通过再次声明其方法为抽象的方式,无需实现,留给其子类来实现,但此类必须也声明为抽象类。既是抽象类,当然也不能实例化。 E. abstract class是interface与Class的中介。 interface是完全抽象的,只能声明方法,而且只能声明pulic的方法,不能声明PRivate及protected的方法,不能定义方法体,也 不能声明实例变量。然而,interface却可以声明常量变量,并且在JDK中不难找出这种例子。但将常量变量放在interface中违背了其作为接 口的作用而存在的宗旨,也混淆了interface与类的不同价值。如果的确需要,可以将其放在相应的abstract class或Class中。 abstract class在interface及Class中起到了承上启下的作用。一方面,abstract class是抽象的,可以声明抽象方法,以规范子类必须实现的功能;另一方面,它又可以定义缺省的方法体,供子类直接使用或覆盖。另外,它还可以定义自己 的实例变量,以供子类通过继承来使用。接口类型转换, instanceof 运算符可以用来决定某对象的 类是否实现了接口。
最重要的,也是经常在面试中问到的:
1.接口是可以继承(extends)接口的。
2.抽象类也是可以实现(implements)接口的,但是抽象类不可以继承(extends)接口
3.抽象类是否可以继承(extends)实体类,是可以的但是前提是实体类必须要有明确的构造函数。
新闻热点
疑难解答