系统相关
首页 > 系统相关> > 面向对象编程----多态_内存分析深化(模拟servlet中方法的调用)

面向对象编程----多态_内存分析深化(模拟servlet中方法的调用)

作者:互联网

分析ServIet中ServIce和doGet的调用顺序

 

 

 

package cn.bjsxt.oop.polymorphism.myServIet;
public class HttpServIet {
// 如果在存储结构在外层子类中没有找到ServIce方法再向存储结构在里一层父类中找ServIce方法
public void ServIce() {
System.out.println("HttpServlet.service()");
// This指向我们本身最后创建完的这个MyServIet对象
// MyServIet对象在存储结构外层子类中没有找到doGet方法再向存储结构在里一层父类中找doGet方法
// doGet();
}
public void doGet() {
System.out.println("HttpServIet.doGet()");
}
// public void dePost() {
// System.out.println("HttpServIet.doPost()");
// }
}

package cn.bjsxt.oop.polymorphism.myServIet;
public class MyServIet extends HttpServIet {
public void doGet() {
// 子类的方法中继续用super调用
// super指向子类的父类方法
// super.doGet();
System.out.println("MYServIet.doGet()");
}
}
class MyServIete extends HttpServIet {

public void doGet() {
// 子类的方法中继续用super调用
// super.doGet();
System.out.println("MyServIete doGet()");
}
}

 

package cn.bjsxt.oop.polymorphism.myServIet;

public class Test {

HttpServIet 此处为编译时类型HttpSerVIet 
public static void testAnimalVoice(HttpServIet c) {
// 通过调用实例化对象c找到里面的方法ServIce方法doGet方法
c.ServIce();
c.doGet();
// instanceof 判断一个对象是不是这个类型的对象
// c是MyServIet类的实例对象
if(c instanceof MyServIet) {
// 编译器不认,c在这还是HttpServIet,所以要强转为MyServIet
// 把c强转为MyServIet然后调用doGet()方法
((MyServIet)c).doGet();
}
}

public static void main(String[] args) {
// 初始化子类MyServIet类,将它声明为父类HttpServIet类 引用叫变量s,
// 初始化父类的变量s
// HttpServIet s = new MyServIet();
// MyServIet继承于HttpServIet实际上也属于HttpServIet的一个子类



// new MyServIet()相当于运行时类型,实际上是一个MyServIet
// MyServIet s = new MyServIet();

// s.ServIce();
// s.doGet();
// 然后调用MyServIet对象s变量模板里面的ServIce,
// s.ServIce();
// This指向我们本身最后创建完的这个MyServIet对象
// MyServIet对象存储结构在外层子类中没有找到ServIce方法再向存储结构在里一层父类中找ServIce方法
// s.ServIce();
// 父类的引用HttpServIet指向了一个子类MyServIete的对象
HttpServIet v = new MyServIete();
// This指向我们本身最后创建完的这个MyServIete对象
// MyServIete对象存储结构在外层子类中没有找到doGet方法再向存储结构在里一层父类中找doGet方法
v.doGet();
// testAnimalVoice(v);
// MyServIete将变量v强制类型转换为(MyServIete)类
// MyServIete ce=(MyServIete)v;
// ce为局部变量 调用变量实例化ce里面的方法doGet()
// ce.doGet();
}
}

 

标签:HttpServIet,ServIce,子类,多态,----,面向对象编程,MyServIet,doGet,public
来源: https://www.cnblogs.com/fantasticDream/p/16332883.html