首先多态的三种表现形式:
继承,重写,父类引用指向子类对象。
下面案例介绍和分析:
父类- HttpServlet
public class HttpServlet {
public void service() {
System.out.println("HttpServlet - service");
doGet();
}
public void doGet() {
System.out.print("HttpServlet - doGet");
}
}
子类- MyServlet
public class MyServlet extends HttpServlet {
public void doGet() {
System.out.println("MyServlet - do Get");
}
}
测试类 - Test
public class Test {
public static void main(String[] args) {
HttpServlet s = new MyServlet();
s.service();
}
}
运行测试类后输出结果:
HttpServlet - service
MyServlet - do Get
代码分析:
HttpServlet s = new MyServlet();// s 虽然是父类变量的引用,但是指向的是子类对象。
s.service();// 子类中没有定义service,因此调用的是继承父类的service方法,然后service方法中调用doGet,这时候也是以子类中优先查找重写的doGet方法。
总结结果:
父类变量的引用指向的是子类对象,因此调用父类变量的方法或者变量,实际运行的是子类对象中的方法和变量(包括继承父类的,重写父类等)。