一.概述
接口是一系列方法的声明,是一些方法特征的集合,是一种规范,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的功能。
二.实例
在生活中,不同的插座厂家生产不同的插座,有的里面用铜来导电,有的用银来导电,还有的用黄金导电。但是插座都遵循特定的规范,使得不同品牌插座都可以互相替换,不用因为电视机插座坏了,不仅要换插座还要换个匹配新插座的电视机。这个规范就类似接口。
如使用不同的数据库,切换数据库就行,不用更改其他东西。
统一使用规范,显示当前数据库名称,登录数据库,进行crud操作
public interface Control_Db {
//接口中没有constucter
//public Control_Db() { }
//J8新特性
// int i = 1;
// static void out(){
// System.out.println("加载中......");
// }
//JDK8新增接口中抽象方法的默认实现 使用default关键字
void sout_Name();
boolean login();
void crud();
}
MySQL遵循这个规范
public class MySQL implements Control_Db {
//interface也需要实现所有方法
@Override
public void sout_Name() {
System.out.println("使用Mysql");
}
@Override
public boolean login() {
//任意实现过程,由mysql自己决定
System.out.println("name-password-Mysql登录成功");
return true;
}
@Override
public void crud() {
//任意实现过程,由mysql自己决定
System.out.println("Mysql crud");
}
}
Oracle也遵循这个规范
public class Oracle implements Control_Db {
@Override
public void sout_Name() {
System.out.println("使用Oracle");
}
@Override
public boolean login() {
System.out.println("name-password-Oracle登录成功");
return true;
}
@Override
public void crud() {
System.out.println("Oracle crud");
}
}
模拟用户
public class User {
//用户使用数据库,所以持有一个数据库对象
private Control_Db control_db;
public User(Control_Db control_db) {
this.control_db = control_db;
}
public Control_Db getControl_db() {
return control_db;
}
public void setControl_db(Control_Db control_db) {
this.control_db = control_db;
}
public void use_Db() {
//J8可以使用接口的静态方法
//Control_Db.out();
//使用数据库,都是一种规范这几个功能功能一样,不用管各个数据库的具体实现
control_db.sout_Name();
control_db.login();
control_db.crud();
}
}
public class Test {
public static void main(String[] args) {
Control_Db mySQL = new MySQL();
//使用mysql数据库
User user = new User(mySQL);
user.use_Db();
Control_Db oracle = new Oracle();
//更换oracle
user.setControl_db(oracle);
user.use_Db();
}
}
三.小结
使用接口的作用:
统一标准,是大家都知道这个是做什么的,但是不用知道具体怎么做
正如DAO层中的接口,没有规范,就会十分混乱
其他问题:
1.接口没有构造器,接口不能实例化
2.实现接口需要实现他的所有方法
3.接口中的方法没有方法体,接口中的所有方法都默认是由public abstract修饰的
4.接口中的所有成员变量默认由public static final修饰
5.接口也可以继承另一个接口,使用extends