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)一个类可以实现多个接口,但只能继承一个类。

浙公网安备 33010602011771号