问题描述
有一个抽象MainServlet类,继承了HttpServlet。又写了一个普通类AdminServlet,继承了MainServlet。当请求指向AdminServlet时,又走了MainServlet中的post方法,很是不解啊。。。另外,在post方法中打印this,竟然是AdminServlet的hash值。为什么啊???这是代码,MainServlet:publicabstractclassMainServletextendsHttpServlet{@OverridepublicvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{doPost(req,resp);}@OverridepublicvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{StringmethodName=req.getParameter("cmd");if(methodName==null||methodName.trim().equals("")){methodName="execute";}try{Methodmethod=this.getClass().getMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);method.invoke(this,req,resp);}catch(Exceptione){thrownewRuntimeException(e.getMessage(),e);}}publicabstractvoidexecute(HttpServletRequestreq,HttpServletResponseresp)throwsException;}AdminServlet:publicclassAdminServletextendsMainServlet{privateAdminServiceservice=newAdminService();publicvoidexecute(HttpServletRequestreq,HttpServletResponseresp)throwsException{Stringname=req.getParameter("name");Stringpassword=req.getParameter("password");Adminadmin=null;if(admin==null){System.err.println("wrong");}}}还请大神们解答啊
解决方案
解决方案二:
我没看你的代码,不过我觉得调用了父类的方法是因为子类没有覆盖父类的方法,所以在调用子类方法的时候,用的还是父类的方法,this指向的是当前的类所以打印的是当前类的值
解决方案三:
引用1楼u010883383的回复:
我没看你的代码,不过我觉得调用了父类的方法是因为子类没有覆盖父类的方法,所以在调用子类方法的时候,用的还是父类的方法,this指向的是当前的类所以打印的是当前类的值
可是这个doPost方法是在MainServlet中的,在doPost中打印this,出来的是AdminServlet的hash值啊
解决方案四:
楼主,代码贴出来
解决方案五:
可是这个doPost方法是在MainServlet中的,在doPost中打印this,出来的是AdminServlet的hash值啊这个肯定的,就算在父类的方法中,this也是同一个对象,都是子类的对象
解决方案六:
整个继承链里地this都是一样的,都是最下面那个子类的实例
解决方案七:
引用2楼TheNewSky的回复:
Quote: 引用1楼u010883383的回复:
可是这个doPost方法是在MainServlet中的,在doPost中打印this,出来的是AdminServlet的hash值啊可是你调用的时候方法真正方法的实现是子类的啊。。继承的方法某种程度上讲就是在子类中直接写上代码的。。
解决方案八:
this指向当前运行时类型,子类没有覆写父类方法,调用的时候实际上还是调用了父类的方法只是调用的人不一样了
解决方案九:
大哥啊,您的的MainServlet中只有一个publicabstractvoidexecute(HttpServletRequestreq,HttpServletResponseresp)throwsException;是抽象的,而且您的AdminServlet中也只实现了该方法,并没有override父类的doPost和doGet方法,那程序肯定会调用父类的方法了,在父类的doPost中使用this肯定是MainServlet啊。。。。建议你还是多看看javase吧。。。时间: 2024-11-03 17:03:30