//人的实体 public class PeopleEntity{ private peopleName; private peopleDo(){ System.out.printly("人都会睡觉"); }} //学生实体 public class StudentEntity extends PeopleEntity(){ public void peopleDo(){ system.out.pringly("学生都要去上课"); } } //教师实体 public class TeacherEntity extends PeopleEntity(){ public void peopleDo(){ System.out.pringly("教师要教学生知识"); }} //测试类 public class peopleTest(){ //调用人的运行 public void runPeople(PeopleEntity people){ people.peopleDo(); } @Test public void peopleRunTest(){ PeopleEntity teacher = new TeacherEntity(); runPeople(teacher); PeopleEntity student = new StudentEntity(); runPeople(student); } }
上面创建了一个People实体作为父类,Teacher实体和Student实体都继承于People,但是在其类中又重写了父类的peopleDo方法。
在测试类中,我们又写了一个方法来调用父类中的peopleDo,在测试方法中,根据我们实例化出来的不同子类,调用该方法,发现得出的是我们子类中重写的方法。这种现象就是面向对象三大特性之一的多态(其他两个是继承和封装),我们对这种行为称为:父类的声明,子类的引用。
作用:
子类重写父类的方法,当外部通过父类调用方法的时,根据实例化的子类不同,方法的执行结果不同,父类无需关系子类的具体实现,当子类过时或其他因素不再需要的时候,移除子类,不会对父类和父类的其他子类造成影响。
具体使用:
在框架中使用的比较多(Spring mvc + mybatis),呃,是我一直在使用框架开发的缘故?
我们项目中的做法是做了一个基础类,这个类中放了一些常用的基础的保存,查询,更新,删除方法,所有的类继承或间接继承改类,在mybatis的Dao.xml中重写这些方法的sql语句。
关于重载和重写还傻傻分不清的同学,请看这位前辈的博客,重写和重载规则写的比较清晰:
http://www.cnblogs.com/bluestorm/archive/2012/03/01/2376236.html
关于多态想了解更多的,可以查看下这位前辈的的博客:
http://blog.csdn.net/superhill/article/details/7526627
时间: 2024-10-24 15:31:17