您的位置:首页 > 职场人生

黑马程序员_接口的基础常识整理

2014-03-07 20:37 375 查看
-------android培训java培训、期待与您交流! ----------
接口(interface)

接口主要用来描述类具有什么功能,而不必给出每个功能的具体实现。

一个类可以实现(implement)一个或多个接口,并在需要接口的地方,随时使用实现了接口的对象。

在Java程序设计语言中,接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。

我们经常听到服务提供商这样说:“如果类遵从某个特定接口,那么就履行这项服务。”下面给出一个具体的实例。Arrays类中的sort方法承诺可以对对象数组进行排序,但必须满足下列前提:对象所属的类必须实现了Comparable接口。

下面是Comparable接口的代码:

public interface Comparable
{
int compareTo(Object other);
}
这就是说,任何实现Comparable的类都需要包含compareTo方法,并且这个方法的参数必须是一个Object对象,返回一个整型数值。

PS:在Java SE 5.0中,Comparable接口已经改进为泛型类型。

public interface Comparable<T>
{
int compareTo(T other); //parameter has type T
}
例如,在实现Comparable<Employee>接口的类中,必须提供以下方法:

int compareTo(Employee other);
也可以使用没有参数类型参数的“原始”Comparable类型,但必须手工将compareTo方法的参数类型转换成所希望的类型。

 

1)     接口中所有的方法自动的属于public。因此,在接口中声明方法时,不必提供关键字public。

2)     接口中可能包含多个方法。

3)     接口中还可以定义常量。

4)     接口中绝不能含有实例域,也不能在接口中实现方法。提供实例域和方法实现的任务应该由实现接口的那个类来完成。因此,可以将接口看成没有实例域的抽象类,但两者还是有区别的。

 

为了让类实现一个接口,通常需要下面两个步骤:

1)     将类声明为实现给定的接口

2)     对接口中所有的方法进行定义

要对垒声明为实现某个接口,需要使用关键字implements:

class Employee implementsComparable<Employee>
这里这里需要提供compareTo方法。假设希望根据雇员的薪水进行比较,如果第一个雇员的薪水低于第二个雇员的薪水就返回-1,如果想等就返回0,否则返回1.

class Employee implementsComparable<Employee>
{
public int compareTo(Employeeother)
{
if(salary <other.salary) return -1;
if(salary >other.salary) return 1;
return 0;
}
//代码省略
}

PS:在接口声明中,没有见compareTo方法声明为public,这是因为接口中所有的方法都自动的是public。不过在实现接口时,必须把方法声明为public,否则,编译器将认为资格方法的访问属性是包可见性,即类的默认访问属性,之后编译器就会给出试图提供更弱的访问权限的警告信息。

 

要让一个类实现排序服务,必须让它实现compareTo方法。

Java程序是一种强类型(strongly typed)语言。在调用方法的时候,编译器将会检查这个方法是否存在。在sort方法中可能存在下面这样的语句:

if(a[i].compareTo(a[j]) > 0)
{
//rearrangea[i] and a[j]
//代码省略
}
      为此,编译器必须确认a[i]一定有compareTo语句。如果a是一个Comparable对象的数组,就可以确保拥有compareTo方法,因为每个Comparable接口的类都必须提供这个方法的定义。

 

接口的特性

接口不是类,尤其不能使用new运算符实例化一个接口。

然而,尽管不能构造接口的对象,却能声明接口的变量:

Comparable x; //OK
接口变量必须引用实现了接口的类对象:

x = new Employee(…); //OK provided Employee implements Comparable
如同使用instanceof检查一个对象是否属于某个特定类一样,也可以使用instanceof检查一个对象是否实现了某个特定的接口:

if(anObject instanceof Comparable){…}
与可以建立类的继承关系一样,接口也可以被扩展。这里允许存在多条从具有较高通用性的接口到较高专用性接口的链。例如,假设有一个称为Moveable的接口:

public interface Moveable
{
void move(double x,double y);
}
然后,可以以它为基础扩展一个叫做Powered的接口:

public interface Powered extends Moveable
{
double milesPerGallon();
}
虽然在接口中不能包含实例域和静态方法,但却可以包含常量:

public interface Powered extends Moveable
{
double milesPerGallon();
double SPEED_LIMIT = 95; //a public static final constant
}
与接口中的方法都自动地设置为public一样,接口中的域将被自动设置为public static final。

 

尽管每个类只有一个超类,但却可以实现多个接口:

class Employee implementsCloneable,Comparable
使用逗号将实现的各个接口分开。

 

接口与抽象类:每个类只能扩展与一个类,但可以实现多个接口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: