gpt4 book ai didi

java - 关于第一个 init() 和第二个 init()

转载 作者:行者123 更新时间:2023-12-01 14:59:20 28 4
gpt4 key购买 nike

部署项目后,当客户端第一次向 TestServlet 发送请求时,服务器会创建 testServlet 对象,然后调用第一个 init() 方法(init(ServletConfig config))。然后 JVM 检查 TestServlet 中的第一个 init() 方法,因为它不可用,然后检查父类(super class) HttpServlet 中的第一个 init 方法也不可用,然后 JVM 检查 HttpServlet 的父类(super class),即 GenericServlet 类中的第一个 init() 可用然后 JVM 执行它并调用第二个 init(),因为第二个 init() 在 TestServlet 中直接可用,然后 JVM 执行它。

问:关于上面的段落,我想知道 GenericServlet 的第一个 init() 是如何调用 TestServlet 类的第二个 init() 的,因为在 GenericServlet 中,第一个 init() 内部调用的是空的 init() 。

最佳答案

这就是多态性的基本原理。由于 init() 是一个可重写的方法,并且 servlet 是 TestServlet 的实例,它重写了 init() 方法,因此使用该方法的 TestServlet 实现。

就像下面的例子:

public class Animal {
public void saySomething() {
// do nothing
}

public void saySomethingElse() {
saySomething();
}
}

public class Dog extends Animal {
@Override
public void saySomething() {
System.out.println("bark!");
}
}

public class Main {
public static void main(String[] args) {
Animal animal = new Dog();
animal.saySomething(); // bark!, because the animal is a dog

animal.saySomethingElse(); // still bark!, because the animal is a dog
// and saySomethingElse() calls the animal's
// polymorphic saySomething() method.
}
}

关于java - 关于第一个 init() 和第二个 init(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13902735/

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