接口

接口

接口的目的就是定义一些方法,让不同的人实现

注:接口可以作为方法的形参或者返回值,需要和返回的都是该接口的实现类对象


普通类:只有具体实现

抽象类:具体实现和规范(抽象方法)都有

接口:只有规范,没有具体实现

注:抽象类和接口虽然都无法实例化对象,但是他有构造方法,而接口没有

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) {

    }
}

匿名内部类与接口的实现

接口无法直接实例化对象,因为没有构造方法。只能通过实现类重写接口方法之后,用实现类来实例化对象。这里可以使用多态,和匿名内部类来操作:

接口引用指向匿名内部类(父类引用指向子类对象)

可以虚假的实现 “接口实例化对象”

具体操作可以看匿名内部类笔记