2)这里面的super关键词,我觉得就是作为一个对于父类的方法的指示。参考Java核心卷;有些人认为 super 与 this 引用是类似的概念, 实际上,这样比较并不太恰当。这是因为 super 不是一个对象的引用, 不能将 super 赋给另一个对象变量, 它只是一个指示编译器调用超类方法的特殊关键字.
public class Servlets { public void service(String req,String resp){ System.out.println("Servlets:service:(1)"); if(req.equals("doGet")){ doGet(); }else if(resp.equals("doPost")){ doPost(); } } public void doGet(){ System.out.println("Servlets.doGet:(2)"); int i=1/0; } public void doPost() { System.out.println("Servlets.doPost:(3)"); int i=1/0; } }
public class Son extends Servlets{
@Override public void service(String req, String resp) { // TODO Auto-generated method stub System.out.println("Son.service:(4)"); super.service(req, resp); }
@Override public void doGet() { // TODO Auto-generated method stub System.out.println("Son.doGet:(5)"); super.doGet(); }
@Override public void doPost() { // TODO Auto-generated method stub System.out.println("Son.doPost(6)"); super.doPost(); } } //测试类 public class Test { public static void main(String[] args) { Son son=new Son(); son.service("doGet",""); } }
打印结果:
1 2 3 4 5 6 7 8 9 10
Son.service:(4) Exception in thread "main" java.lang.ArithmeticException: / by zero Servlets:service:(1) Son.doGet:(5) Servlets.doGet:(2) at com.servlet_source_test.Servlets.doGet(Servlets.java:14) at com.servlet_source_test.Son.doGet(Son.java:16) at com.servlet_source_test.Servlets.service(Servlets.java:7) at com.servlet_source_test.Son.service(Son.java:9) at com.servlet_source_test.Test.main(Test.java:6)