接口
接口
接口的目的就是定义一些方法,让不同的人实现
注:接口可以作为方法的形参或者返回值,需要和返回的都是该接口的实现类对象
普通类:只有具体实现
抽象类:具体实现和规范(抽象方法)都有
接口:只有规范,没有具体实现
注:抽象类和接口虽然都无法实例化对象,但是他有构造方法,而接口没有
java规定类都要有一个构造方法,没有默认提供一个空参构造(抽象类也是类)。构造方法不是用来实例化的,而是用来给属性初始化赋值的,抽象方法可以定义属性(抽象和普通),那么就需要构造方法(有参和无参)给属性赋初值。这里就可以理解为什么接口没有构造方法了所以属性必须是常量了。
还可以从另一个角度理解,抽象类必须有实现类继承(extends)来实现,初始化一个子类会先初始化父类。所以抽象类要有构造方法
- 接口的关键字为:interface
- 接口都需要有实现类,关键字:implements
implements英文释义:使生效,贯彻,执行
- 接口中的方法都默认(且必须)带有修饰符public abstract
- 接口中的属性都默认(且必须)带有修饰符public static final
- implements可以实现多个接口
- 和抽象类相同,在实现类中必须要重写接口中所有方法(默认为抽象方法)
接口UserService
public interface UserService {
void add(String name);
void delete(String name);
void update (String name);
void query (String name);
}
接口TimeService
public interface TimeService {
void timer();
}
调用接口的实现类(实现类可以implements多个接口,且必须要重写接口中每一个(抽象)方法)
public class UserServiceImpl implements UserService,TimeService{
@Override
public void timer() {
}
@Override
public void add(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void query(String name) {
}
}
匿名内部类与接口的实现
接口无法直接实例化对象,因为没有构造方法。只能通过实现类重写接口方法之后,用实现类来实例化对象。这里可以使用多态,和匿名内部类来操作:
接口引用指向匿名内部类(父类引用指向子类对象)
可以虚假的实现 “接口实例化对象”
具体操作可以看匿名内部类笔记