gpt4 book ai didi

Java接口(interface)和实现

转载 作者:行者123 更新时间:2023-12-02 08:49:03 25 4
gpt4 key购买 nike

我正在使用我的 Java Web 应用程序使用 Web 服务。这会返回许多数据,其中有一个名为 Consumer 的属性。当 WSDL 转换为 Java 代码时,它被表示为一个对象。该类中只有一个字符串变量id。还有另一个类 Person 扩展了 Consumer。它有一个数字字段,如 firstNamelastName 等。在 JSF 代码中,有一个对 consumer.firstName 的引用以及与当 person 对象作为响应 xml 的一部分返回时,firstName 会正确打印。这让我有点困惑,因为消费者对象不包含 firstName 并且当使用 consumer.firstName 时该值仍然可以正确打印。请您帮助我理解这一点。

JSF 代码

<h:outputText value="#{myBean.consumer.firstName}" />

支撑 bean

public Consumer getConsumer() {
return consumer;
}

消费类

public class Consumer implements java.io.Serializable {

private java.lang.String id;

public java.lang.String getId() {
return this.id;
}

public void setId(java.lang.String id) {
this.id = id;
}

}

人员类别

public class Person extends Consumer {
private String firstName;
private String lastName;
private String dateOfBirth;

// Getters and Setters
}

最佳答案

JSF 使用反射来调用对象上的方法。它不知道 myBean.consumer 的类型是什么。它所知道的只是您询问了该对象的firstName。所以,它的作用是

  1. 在任意范围内查找名为 myBean 的属性
  2. 如果不为 null,则查找该对象的类(或任何父类(super class)或接口(interface))中是否存在名为“getConsumer”的公共(public)无参数方法
  3. 调用该方法,得到结果:另一个对象
  4. 如果此其他对象不为 null,则查找此其他对象的类(或任何父类(super class)或接口(interface))中是否存在名为“getFirstName”的公共(public)无参数方法
  5. 调用此方法

因此,即使方法 getConsumer() 声明它返回一个 Consumer,如果在运行时,由 getConsumer()< 返回的实际对象 是一个 Person,JSF 会在 Person 中搜索 getFirstName() 方法,它会找到它,并愉快地调用它并输出结果。

关于Java接口(interface)和实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8909834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com