Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 帮助理解对象的接口声明_Java - Fatal编程技术网

Java 帮助理解对象的接口声明

Java 帮助理解对象的接口声明,java,Java,有人能给我解释一下这个java代码吗。我觉得很难理解 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String firstName = request.getParameter("firstName").toString(); processRequest(request, respons

有人能给我解释一下这个java代码吗。我觉得很难理解

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    String firstName = request.getParameter("firstName").toString();
    processRequest(request, response);
}
所以请求是接口类HttpServletRequest的一个对象,它得到了一些空方法

  • 但是如果getParameter()方法为空,它如何返回任何数据呢

  • 而且,我在HttpServletRequest接口中找不到getParameter()。但它不应该是一个,因为请求被声明为HttpServletRequest,因此拥有它的所有方法和字段吗

  • 以及toString()来自哪个类


  • 所以HttpServletRequest是一个接口。接口为要实现的实际类声明方法。在这种情况下,servlet容器将为您提供实现(取决于您使用的是什么:Tomcat、Jetty等)。记住,接口也可以相互扩展。在这种情况下,HttpServletRequest扩展了ServletRequest。您应该查看更多的方法

    需要明确的是,HttpSerlvetRequest的方法并不是“空的”。已经由容器实现,因此当容器调用上面的方法时,它传递给您的对象是实现HttpServletRequest接口的成熟对象。这就是为什么你可以将它们铸造成这样


    Edit:toString()方法来自。这是所有java对象的基类

    所以HttpServletRequest是一个接口。接口为要实现的实际类声明方法。在这种情况下,servlet容器将为您提供实现(取决于您使用的是什么:Tomcat、Jetty等)。记住,接口也可以相互扩展。在这种情况下,HttpServletRequest扩展了ServletRequest。您应该查看更多的方法

    需要明确的是,HttpSerlvetRequest的方法并不是“空的”。已经由容器实现,因此当容器调用上面的方法时,它传递给您的对象是实现HttpServletRequest接口的成熟对象。这就是为什么你可以将它们铸造成这样

    Edit:toString()方法来自。这是所有java对象的基类

    1)
    HttpServletRequest
    继承自接口
    ServletRequest
    ,该接口包含
    getParameter()
    方法

    2) 当Java方法将接口列为参数类型时,实现该接口的对象必须作为参数传入。该对象将具有实现
    getParameter()
    的代码,而不是您在接口中看到的“empty方法”。(例如,一个这样的对象是
    HttpServletRequestWrapper

    所有这些信息都可以在JavaDocs中找到,例如:

    1)
    HttpServletRequest
    继承接口
    ServletRequest
    ,该接口包含
    getParameter()
    方法

    2) 当Java方法将接口列为参数类型时,实现该接口的对象必须作为参数传入。该对象将具有实现
    getParameter()
    的代码,而不是您在接口中看到的“empty方法”。(例如,一个这样的对象是
    HttpServletRequestWrapper

    所有这些信息都可以在JavaDocs中找到,例如:


    该方法不接受接口类型为“HttpServletRequest”的对象。相反,它接受实现该接口的任何对象。类实现接口的方式是为接口表示可用的方法提供实现(即代码)

    例如,假设我们有一个狗的接口

    interface Dog {
        public String bark();
    }
    
    对于实现该接口的任何给定类,它都必须提供自己版本的bark()。每个类都以最有意义的方式实现该方法

    class GoldenRetriever implements Dog {
        public String bark() {
            return "Woof!";
        }
    }
    class YippyDog implements Dog {
        public String bark() {
            return "yip";
        }
    }
    
    编辑评论:

    当实际使用bark()命令时,您将编写一个方法,该方法接受实现Dog接口的任何类作为输入:

    public dodog(Dog mydog) {
        System.out.println(mydog.bark());
    }
    
    然后,您可以通过创建实现Dog接口的任何类型的对象来使用该方法

    public void usedog() {
        GoldenRetriever golden = new GoldenRetriever();
        dodog(golden);
    
        YippyDog yippy = new YippyDog();
        dodog(yippy);
    }
    
    dodog方法接受这两种方法,因为它们都是实现Dog接口的类的实例。然后它可以调用bark()方法,因为它知道它们实现了它。。。因为它们实现了Dog接口


    我希望这更清楚。

    该方法不接受接口类型为“HttpServletRequest”的对象。相反,它接受实现该接口的任何对象。类实现接口的方式是为接口表示可用的方法提供实现(即代码)

    例如,假设我们有一个狗的接口

    interface Dog {
        public String bark();
    }
    
    对于实现该接口的任何给定类,它都必须提供自己版本的bark()。每个类都以最有意义的方式实现该方法

    class GoldenRetriever implements Dog {
        public String bark() {
            return "Woof!";
        }
    }
    class YippyDog implements Dog {
        public String bark() {
            return "yip";
        }
    }
    
    编辑评论:

    当实际使用bark()命令时,您将编写一个方法,该方法接受实现Dog接口的任何类作为输入:

    public dodog(Dog mydog) {
        System.out.println(mydog.bark());
    }
    
    然后,您可以通过创建实现Dog接口的任何类型的对象来使用该方法

    public void usedog() {
        GoldenRetriever golden = new GoldenRetriever();
        dodog(golden);
    
        YippyDog yippy = new YippyDog();
        dodog(yippy);
    }
    
    dodog方法接受这两种方法,因为它们都是实现Dog接口的类的实例。然后它可以调用bark()方法,因为它知道它们实现了它。。。因为它们实现了Dog接口


    我希望这更清楚。

    @noname,@darren很好地回答了你的问题,但你向他提出的问题表明,你需要解释更多的基本问题。所以

    request
    是实现
    HttpServletRequest
    的类的对象。当我们看向天空时,我们看到:

    说一个类
    实现了一个接口,或者说一个接口
    扩展了另一个接口,可以用更人性化的术语表示为