Page遇到了一个问题

Page实现了IPage但是没有pages字段为啥接口还是能返回这个字段呀?

JDK 8 接口新增了默认方法,这里的pages 是通过IPages中的 getPages()方法取到的

img

是不是继承了

该回答引用ChatGPT4与博主@晓码自在合作编写:

这是因为在 Java 中,接口中的方法和字段都隐式地具有 public abstract 修饰符。所以 IPage 接口中的 pages 字段实际上是:

java
public abstract int pages;

由于 pages 字段被定义为抽象的,所以任何实现 IPage 的类都必须提供这个字段的具体实现。否则,那个类也必须定义为抽象类。

但是,在 Page 类中,虽然没有定义 pages 字段,但是由于 IPage 接口中定义了这个抽象字段,所以 Page 类依然具有 pages 字段 - 只不过它也被隐式地定义为抽象的:


java
public int pages; // 隐式定义为 abstract

这就是为什么 Page 类的对象仍然可以调用 pages 字段的原因 - 这实际上是在调用接口 IPage 中定义的抽象方法。由于 Page 类没有提供 pages 字段的具体实现,所以每次调用 pages 时,都会返回接口 IPage 中定义的抽象方法。

所以总结一下,原因是:

  1. 接口中的方法和字段默认为 public abstract
  2. 实现接口的类必须实现所有的抽象方法和字段,否则该类也必须为抽象类
  3. 如果实现类没有定义接口中的抽象字段,那么该字段在实现类中也隐式地定义为抽象的,并且调用该字段时,实际调用的是接口中的抽象方法