接口(interface)的作用: 1.约束 2.定义一些方法,让不同的人实现 3.接口中的方法默认有 public abstract (公共抽象的)修饰 4.接口中的常量修饰有 public static final(公共静态常量)修饰 5.接口不能被直接实例化!!!!,因为接口不是class(类),里面也没有构造方法,所以不能new 6.接口可以实现(implements)多个接口(伪多继承) 7.如果在实现类中(类名 = 接口名+Impl),必须重写接口中的所有方法
8.JDK8之后的接口中可以写普通方法,用default修饰---
default void min(){};
//接口一
public interface UserService {
//接口中定义一个成员属性
public static final int NUM = 10;
/*
这里的class地方用interface替换,interface就是接口的意思
注意图标也产生了变化
接口中只能写抽象方法,而且都是 public abstract 修饰的
*/
public abstract void run();//public abstract变灰是因为在接口中默认去书写的
//void eat(){} ,报错因为带大括号的不是abstract抽象修饰的抽象方法
void add(String name); //增
void delete(String name); //删
void update(String name); //改
void query(String name); //查
}
//接口二
public interface TimeService {
void timer();
}
/*
1.接口一般需要有个实现类
2.实现类的书写规则是接口名加 impl结尾
3.注意后续要 implements(实现) + 接口
由于接口里面的方法都为abstract修饰的抽象方法,所以这里要重写接口中的所有抽象方法
*/
//extends只能单继承,而interface可以多实现(伪多继承),但是需要重写所有抽象方法
public class UserServiceImpl implements UserService,TimeService{
//看看可以输出接口中的变量吗
public void getNum(){
System.out.println(NUM);
}
@Override
public void run() {
}
@Override
public void add(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void query(String name) {
}
@Override
public void timer() {
}
}
//创建主方法去测试
class Test{
public static void main(String[] args) {
//1.static修饰的变量可以被类名.调用
System.out.println(UserServiceImpl.NUM);
//也可以直接用接口点变量名输出
System.out.println(UserService.NUM);
//2.通过new对象点调用改方法
UserServiceImpl u = new UserServiceImpl();
u.getNum();
//但是这里不可以实例化接口
UserService userService = new UserService();
//会报错!!!!
}
}