一、问题
最近在重新学习JavaWeb,对于以下代码不是很理解:
public class HelloServlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2的doGet方法");
// 1、获取 web.xml 中配置的上下文参数 context-param
ServletContext context=getServletConfig().getServletContext();
String username=context.getInitParameter("username");
System.out.println("context-param参数username的值是:"+username);
System.out.println("context-param参数password的值是:"+1);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2的doPost方法");
}
}
如上,为什么getServletConfig()可以直接调用呢,不应该先对类进行实例化,再调用对象的方法吗?
二、原因
分析HelloServlet2的继承关系,可以发现其最终继承的类为GenericServlet类,该类中存在着方法getServletConfig()。根据继承关系,子类HelloServlet2可以调用父类的方法getServletConfig()。
三、思考
示例如下:
定义抽象类Animal
package com.coderp.test;
/**
* @program: 06_web
* @description: 动物
* @author: CoderP
* @create: 2021-04-27 11:14
**/
public abstract class Animal {
public int eat(){
System.out.println("animal eating.....");
return 1;
}
}
peopel类继承animal类
package com.coderp.test;
import org.junit.Test;
/**
* @program: 06_web
* @description:
* @author: CoderP
* @create: 2021-04-27 11:15
**/
public class People extends Animal {
int i=eat();
@Test
public void test() {
System.out.println(i);
}
}
输出结果如下: