Java学习5之接口

接口不是类,而是一个特殊的名称,使用interface关键字。子类可以实现多个接口。

接口实现:

public class Child extends Parent implements InterfaceOne,InterfaceTwo{}

接口只提供了对象的行为签名,而没有任何实现。

它不可以直接被实例化,它只能在被子类实现为一个具体类型后才能使用。

InterfaceOne one = new Child();

使用接口的同时,又带来面向父类编程的优势,代码更加通用、清晰。

接口的定义:

public interface Service{

int data = 10;

void send(int data);

int receive();

}

接口定义知识将原来定义类的class关键字换成interface关键字。

接口中的方法定义和通常的方法定义一样,只是没有实现体。接口中的方法只能是公有的public abstract,可以省略不写。接口中的data变量看似是一个成员变量,但事件上默认它是一个公有的静态的final变量(即常量)。完整的Service类如下:

public interface Service{

public static final int data = 10;

public abstract void send(int data);

public abstract int receive();

}

接口是统一的服务,客户都是可以全部使用的。

接口的实现:

实现Service接口:

public class ConcreteService implements Service{

public void send(int data){

System.out.println("data");

}

public int receive(){

return 10;}

}

attentions:

完全实现了所有所有接口方法的类就是一个具体的类。

部分实现了接口方法的类是一个抽象的类。

接口通过实现(implements)演变成为一个类(class)。

接口可以通过继承(extends)创建新的子接口。

 

可以把接口理解为一个完全抽象的类,只是用法稍有区别。

(1)可以多重实现(类似多重继承,但是更纯净),使用关键字implements实现到类的演变。

(2)方法默认全部公有public,所有方法只有定义,没有实现。

(3)所有变量默认是公有静态final的常量,而且必须被显示初始化。

其他与普通类使用方法没有任何区别。

 1 public interface Service{
 2 void send(int data);
 3 int receive();
 4 }
 5 abstract class AbstractService implements Service{
 6 public void send(int data){
 7 System.out.println(data);
 8 }
 9 }
10 class ConcreteService extends AbstractSevice{
11 public int receive(){
12 return 10;
13 }
14 public static void main(String[] args){
15 Service service = new ConcreteService();
16 Service.send(10);
17 }
18 }

当多重实现多个接口时,可能会出现被实现函数混淆问题。此时问题无法解决,只能尽可能避免此问题的出现。

接口和抽象类有很多相似之处,但是:

(1)接口中不能有构造方法。

(2)接口中没有普通成员变量,只有常量。

(3)接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

(4)接口中的抽象方法类型只能是public类型的,默认是public abstract类型。

(5)接口中不能包含静态方法。

(6)抽象类和接口中都可以包含静态成员变量。但接口中定义的变量只能是public static final类型,并且默认为public static final 类型。

(7)一个类可以实现多个接口,但只能继承一个类。

posted @ 2015-08-13 11:15  笨笨coding  阅读(186)  评论(0)    收藏  举报