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指向的当前对象为基础来调用的。

如有任何疑问可联系邮箱: 给我发邮件、或直接联系QQ:1584875179 || 点返回首页

原文地址:https://www.cnblogs.com/aeon/p/9976950.html