047_面向对象_20_内存分析深化
一、演示示例(以往后我们学到的servlet为例)
package edu.aeon.test; /** * [说明]:测试多态(servlet) * @author aeon * */ public class HttpServlet { public void service(){ System.out.println("HttpServlet.service()"); doGet();//其实和this.doGet()一样、所以此处的this指向谁调用谁的 } public void doGet(){ System.out.println("HttpServlet.doGet()"); } }
package edu.aeon.test; /** * [说明]:重写edu.aeon.test.HttpServlet类中的service()方法(因为多态基于继承(重写)、父类引用指向子类对象) * @author aeon * */ public class MyServlet extends HttpServlet { @Override public void doGet() { System.out.println("MyServlet.doGet()"); } }
package edu.aeon.test; /** * [说明]:测试多态 * @author aeon * */ public class Test { public static void main(String[] args) { HttpServlet httpServlet = new MyServlet();//父类引用指向子类对象 httpServlet.service(); } }
测试结果截图:
本示例在内存中的结构图:
结论: 通过HttpServlet httpServlet = new MyServlet();这行代码我们可以得知父类(HttpServlet )的引用指向子类(MyServlet)的对象、那么这个对象本身是子类对象、所以此处的this代表的是子类MyServlet对象(实例) 通过httpServlet.service();因为个方法里面有两个隐式参数this,super(不知道的同学可以看前面)所以所调用的方法均基于this指向的当前对象为基础来调用的。 |