抽象类与接口的三点区别

来源:互联网 发布:计算机数据库的应用 编辑:程序博客网 时间:2024/05/01 21:11

在使用上,一个不包含非抽象方法的抽象类与接口是类似的,不过请注意以下几点

1:一个类可以实现任意多个接口,但它最多只能继承一个抽象类

2:一个抽象类可以含有诺干个非抽象方法,它通常是模板方法模式的一个实例.而一个接口的所有方法都是抽象的,无论是否将它的方法显示地声明为抽象.

3:一个抽象类可以声明实例变量,其子类可以继承这些实例变量.而一个接口不能声明实例变量,不过接口可以声明static final修饰的域。

4:一个抽象类可以定义构造方法,而接口不能。

5:一个抽象类的可见性修饰符可以是public,protected,private,或者无修饰符(表示包内可见);而一个接口的可见性修饰符只能是public,或者无修饰符(表示包内可见)

6:一个抽象类的方法的可见性修饰符可以是protected,private,或者无修饰符(表示包内可见);

而一个接口的方法的可见性修饰符只能是public.

7:一个抽象类是从Object类派生而来的,它继承了Object类的clone()方法和equals()方法。

 

 

 

例:

 

package com.oozinoz.simulation;

import com.oozinoz.units.*;

 

interface RocketSim()

{

       abstract Length appgee();

       public Force thrust();

}

 

下面的表述正确的是?

A: RocketSim接口中的两个方法都是抽象方法,尽管只有apogee()方法显式地声明为抽象的

   正确,接口的方法总是抽象的,无论是否显式地声明

B: RocketSim接口中的两个方法都是公共方法,尽管只有thrust()方法显式地声明为公共的

   正确,接口的方法总是公共的,无论是否显式地声明。

C: 所有接口都是公共的,所以RocketSim也是公共的,尽管它没有显式地声明为公共的

    错误,该接口的可见性受限于其所在的包,RocketSim接口没有显式地声明为public,因而它在包内可见,com.oozinoz.sim包之外的其他类是无法访问或实现该接口的。

D: 可以再创建一个接口,如RocketSimSolid接口,并扩张RocketSim接口。

   正确,例如,List接口和Set接口都扩展了java.util包中的Collection接口。

E: 每个接口必须至少含有一个方法

  错误,不含方法的接口被称作标记(market)接口

F:接口可以声明实例域,实现该接口的类,也必须声明该域。

  错误,一个接口不能声明实例域,不过它可以通过声明static和final修饰的域来声明常量

G:虽然不能实例化一个接口,但接口定义可以声明构造器方法,要求实现该接口的类必须提供具有指定参数的构造器的方法。

  错误,接口不可以定义构造方法