当前位置: 首页 > 知识库问答 >
问题:

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

都昊乾
2023-03-14

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

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

共有1个答案

东门新立
2023-03-14

这是多态性的基本原理。由于init()是可重写的方法,并且servlet是重写init()方法的TestServlet实例,因此使用该方法的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.
    }
}
 类似资料:
  • 先尝试用 D3 写第一个 HelloWorld 程序。学编程入门的第一个程序都是在屏幕上输出 HelloWorld,本课稍微有些不同,不是单纯的输出。 HTML 是怎么输出 HelloWorld 的 都知道 HTML 吧,如果不知道请下百度一下吧。在 HTML 中输出 HelloWorld 是怎样的呢,先看下面的代码。 <html> <head> <meta charset="

  • 第二课: 画第一个三角形 这将又是一篇长教程。 用OpenGL 3实现复杂的东西很方便;为此付出的代价是,画一个简单的三角形变得比较麻烦。 不要忘了,定期复制粘贴,跑一下代码。 如果程序启动时崩溃了,很可能是你从错误的目录下运行了它。请仔细地阅读第一课中讲到的如何配置Visual Studio! 顶点数组对象(VAO) 你需要创建一个顶点数组对象,并将它设为当前对象(细节暂不深入): GLuint

  • 问题内容: 如果这是一个简单的问题,我深表歉意,但是当第一个数字小于第二个数字时,我很难理解模数除法的概念。例如,当我的书中1%4的剩余数为1时,我不知道1%4的剩余数如何为1。1 / 4为0.25。我是否在错误考虑模数除法? 问题答案: 首先,在Java中,%是余数(不是模)运算符,其语义略有不同。就是说,您需要考虑仅整数除法,就好像没有小数。可以将其视为不可分割的项目:您可以将零个大小为4的项

  • 我试图弄清楚如何确定特定的星期一是给定月份的第一个、第二个、第三个还是第四个星期一。我已经弄清楚了如何使用LocalDate类获取下一个星期一和月中的一周。 在上面的例子中,代码获取下一个星期一及其所在的星期。星期是二月的第二周,但那个星期一不是第二个星期一,而是第一个星期一。如果您有任何帮助,我们将不胜感激。

  • 我有两个查询写在同一时间这样: 在执行第二个查询之前,是否可以使用SQL指令或在代码中获取ID? 谢谢:)

  • 我正在处理一个关于codingbat的问题,这个问题说:给定一个字符串和第二个“单词”字符串,我们会说这个单词匹配字符串,如果它出现在字符串的前面,除了它的第一个字符不需要完全匹配...在匹配时,返回字符串的前面,或以其他方式返回空字符串。所以,所以用字符串“河马”,“嗨”这个词返回“嗨”,“xip”返回“臀部”。单词长度至少为1。我不能解决它,但在网上找到了一个解决方案,代码如下所示。代码工作,