Java接口特性总论

来源:互联网 发布:软件license怎么查看 编辑:程序博客网 时间:2024/06/03 13:39

Java接口特性总论

1. Java接口不是类,尤其不能使用new运算符实例化一个接口。例如:X = new OneInterface(...); //ERROR

2. 可以声明接口的变量(虽然不能构造接口对象)。例如:OneInterface X; // RIGHT

3. 接口变量必须引用(或指向)实现了接口的类对象。例如:X = new XxxxObject(); //XxxxObject implements OntInterface

4. 与检查某个类是否属于某个特定类的子类方法一样,也可以使用instanceof检查一个对象是否实现了某个特定的接口。例如:if(anObject instanceof Comparable) {...}

5. 与类的继承关系一样,接口也可以被扩展。这里容许存在多条具有较高通用性的接口到较高专用性的接口的链。例如,假设有一个称为Moveable的接口:

public interface Moveable

{

void move(double x, double y);

}

然后,可以以它为基础扩展一个叫做Powered的接口:

public interface Powered extends Moveable

{

double milesPerGallon();

}

6. 接口中不可以包含实例域或静态方法,但却可以包含常量。例如:

public interface Powered extends Moveable

{

double milesPerGallon();

Double SPEED_LIMIT = 95; //a public static final constant

}

7. 接口中的方法都自动地被设置为public一样,接口中的域将被自动设为public static final

8. 与C++多继承类似,虽然每个Java类只能够具有一个超类,但却可以实现多个接口。其目的是为了提供灵活性。不过有个与C++有不同的地方,例如:

public interface A {

void fun();

}

public interface B {

void fun();

}

public class TestInterface implements A, B {

@Override

public void fun() {

// TODO Auto-generated method stub

System.out.println("fun");

}

public static void main(String args[]){

TestInterface a = new TestInterface();

a.fun();

}

}

以上代码也会编译通过并正常运行,这就表示java的接口机制与C++多继承是不同的,C++如果要做同样的事情一定要用到space方式,并且一定是多态的(如果您知道非多态实现希望您能教授一下本人!小小的猜测一下,难道用函数指针实现?那样会很麻烦诶!)。而java中的interface技术只是用来描述类具有什么功能,所以说interface并不是类(当然与抽象类也完全不一样)。有人说接口只是用来强调类的功能的,本人表示同意。

9. 接口可以只有常量属性或方法。