编程有两大阶段:编译阶段,运行阶段。
编译的时候把范围定得宽及一些(如定义为Animal),实际运行时是猫就是猫是狗就是狗。
多态是方法的多态,属性没有多态。
为什么要使用多态?
不用多态时
使用多态时
使用此种方法时,如果调用的方法不在父类中需要进行强制转换。
代码的执行时的内存分析
内存分析深化(模拟servlet中方法的调用)
//HttpServlet.java
package cn.bjsxt.oop.polymorphism.myServlet;
public class HttpServlet{
public void service(){
System.out.println("HttpServlet.service()");
doGet();
}
public void doGet(){
System.out.println("HttpServlet.doGet()");
}
}
//MyServlet.java
package cn.bjsxt.oop.polymorphism.myServlet;
public class MyServlet extends HttpServlet{
public void doGet(){
System.out.println("MyServlet.doGet");
}
}
//Test.java
package cn.bjsxt.oop.polymorphism.myServlet
public class Test{
public static void main(String[] args){
HttpServlet s = new MyServlet();
s.service();
}
}
输出结果为:
HttpServlet.service()
MyServlet.doGet()
内存分析: