接口
大公司就是提前定义好接口 提前约束好你需要实现什么数据
这样就可以让员工们去分别实现这个功能
接口就是多个类的公共规范。接口是一种引用数据类型,最重要的内容就是其中的:抽蒙方法。如何定义一个接口的格式。public interface {(//接口内容}
备注:换成了关键字interface之后,编译生成的字节码文件仍然是:.java–>.class。
如果是Java7,那么接口中可以包含的内容有: 1.常量2.抽象方法
如果是Java8,还可以额外包含有: 3.默认方法4.静态方法
如果是Java9,还可以额外包含有: 5.私有方法
抽象方法的接口使用
接口使用方法:
- 接口不能直接使用,必须有个实现类来实现接口方法 public class xxx implements yyy
- 实现类必须实现接口中 所有抽象方法
- 创建实现类的对象并且进行使用
- 如果实现类没有实现所有方法,那他就需要变成抽象类
接口和抽象类一样 不可以new 因为他们根本就没有构造器
接口其实和抽象类很像 只是关键字 和 单继承关系不一样
接口是定义好interface文件 然后用一个class implements 这个interface文件(在里面override方法)
抽象是定义好abstract文件 然后用一个class extends 这个abstract文件(在里面override方法)
注:
- 接口里所有的方法默认都是 public abstract 的隐藏修饰
- public abstract void add() 和 void add() 其实是一样的
- 可以在接口定义常量 但是完全没必要
- public static final int age = 99 和 int age = 99 其实是一样的
- 一个implements文件可以同时实现几个接口 所以侧面的实现了 伪.多继承
//接口的话 把class换成 interface关键字
//所有接口都必须有实现类
public interface UserService {
//基本不会有人在在接口里定义常量
//接口里所有的属性 默认都是 public static final 的隐藏修饰
//定义出来就是一个静态不可变的常量
//public static final int age = 99;
int age = 99;
//接口里所有的方法默认都是 public abstract 的隐藏修饰
//public abstract void add(String name); //这个和下面的相等
void add(String name);
void delete(String name);
void update(String name);
void query(String name);
}
public interface TimeService {
void timer();
}
//一个类可以实现接口 通过implements关键字来实现
//实现接口的类就要重写他的所有方法
//这就从侧面实现了伪.多继承
public class UserAndTimeImpl implements UserService,TimeService{
@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() {
}
}
接口类也可以直接写在相同的java文件里并且直接去实现它
public class Direct {
private int id;
//这是一个方法 里面有局部内部类去实现接口
public void impl(){
//在这里实现下面的接口
//没有名字 其实也可以写成下面的形式
/* 和安卓的书写格式一样。。。。。
UserTest usertest = new UserTest(){
};
*/
new UserTest(){
@Override
public void print() {
System.out.println("在方法里写的实现下面接口的匿名内部类");
}
};
}
}
//在这个class下写你的接口,记住 每个java文件根目录下只能有一个public
interface UserTest{
void print();
}
默认方法的接口使用
从Java8开始 允许使用默认方法接口
public default 返回值类型 方法名称(参数列表){
方法体
}
目的 解决接口升级问题,当接口升级时(增加方法时),实现类会因为缺少override抽象方法而报错,为了避免已经投入运行的实现类报错,我们需要用一个更温和的手段去更新新的接口和实现类,于是默认方法接口应运而生。