黑马程序员_接口的基础常识整理
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
使用逗号将实现的各个接口分开。
接口与抽象类:每个类只能扩展与一个类,但可以实现多个接口。
接口(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
使用逗号将实现的各个接口分开。
接口与抽象类:每个类只能扩展与一个类,但可以实现多个接口。
相关文章推荐
- 黑马程序员_类的基础常识整理
- 黑马程序员——Java基础---集合(Set接口及其子类、Map接口及其子类)
- 黑马程序员——Java基础---继承、抽象、接口
- 黑马程序员——Java基础---继承、抽象、接口(二)
- 黑马程序员——Java基础——面向对象(继承、接口、多态)
- 黑马程序员-java基础 继承、抽象、接口
- 黑马程序员-JAVA基础-Java 集合之Collection 接口和遍历方法
- 黑马程序员--java基础复习继承之抽象类与接口
- 黑马程序员:Java基础总结----接口
- 黑马程序员——基础知识--接口
- 黑马程序员__java基础__面向对象(继承、接口)
- 黑马程序员_JAVA基础_抽象类与接口的关系
- 黑马程序员——Java基础---继承,抽象,多态,接口,包,内部类
- https 原理 算法等基础常识整理
- 黑马程序员——Java基础继承、抽象、接口
- 黑马程序员----------基础之类、接口
- 黑马程序员_Java基础_抽象类,模板设计模式,接口,内部类,多态
- C#基础知识整理:基础知识(9) 接口的应用
- 黑马程序员_我的Linux基础整理笔记
- 黑马程序员---Java基础---面向对象:继承、抽象类、接口