Java多态理解

//人的实体
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

Java多态理解的相关文章

对java多态的理解

java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是"向上转型". 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过 Cat c = new Cat(); 实例化一个Cat的对象,这个不难理解. 但当我这样定义时: Animal a = new Cat(); 表示定义了一个Animal类型的引用,指向新建的Cat类型的对象.由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向Cat类型的对象的. 那么这样做

深入理解Java多态机制

从字节码层面来看,Java中的所有方法调用,最终无外乎转换为如下几条调用指令. invokestatic: 调用静态方法. invokespecial: 调用实例构造器<init>方法,私有方法和父类方法. invokevirtual: 调用所有的虚方法. invokeinterface: 调用接口方法,会在运行时再确定一个实现此接口的对象. invokedynamic: 调用动态方法.JDK 7引入的,主要是为了支持动态语言的方法调用. JVM提供了上述5条方法调用指令,所以不妨从字节码层面

java接口理解(转载)

今天和同事好好的讨论了java接口的原理和作用,发现原来自己的对接口的理解仅仅是局限在概念的高度抽象上,觉得好像理解了但是不会变化应用其实和没有理解差不多.以前看一个帖子说学习一个东西不管什么时候都要带着“这个东西是什么?”.“这个东西有什么作用?”和“这个东西怎样用?”三个问题,这三个问题回答上来了说明你对这个事物的理解达到了一定的高度. 今天还有一个比较深的经验是要学习到知识就要多和人交流.就像以前某个管理人员说得“要疯狂的交流”. 现在对于今天学到的接口部分做一个详细地总结: 接口的概念其

Java多态性理解

Java多态性理解 Java中多态性的实现 什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法. 多态的作用:消除类型之间的耦合关系.

Java多态对象的类型转换和动态绑定

Java多态对象的类型转换这里所说的对象类型转换,是指存在继承关系的对象,不是任意类型的对象.当对不存在继承关系的对象进行强制类型转换时,java 运行时将抛出 java.lang.ClassCastException 异常. 在继承链中,我们将子类向父类转换称为"向上转型",将父类向子类转换称为"向下转型". 很多时候,我们会将变量定义为父类的类型,却引用子类的对象,这个过程就是向上转型.程序运行时通过动态绑定来实现对子类方法的调用,也就是多态性. 然而有些时候为

JAVA 多态的一种实现

今天一个同事问我一个问题,就是关于子类,父类之间方法的调用这里的.这里我整理了一个小DEMO. 代码如下: 父类的代码: public abstract class ClassA { public final void execute() { System.out.println("A"); work(); } protected abstract void work(); } 这里,我个人理解,这里的execute()方法,好像用了设计模式中的命令模式. 子类代码: public c

Java多态之动态绑定

目录 Java多态之动态绑定 引用变量的类型 编译时类型 运行时类型 方法绑定 静态绑定 动态绑定 方法表 Java多态之动态绑定 上篇回顾:多态是面向对象程序设计非常重要的特性,它让程序拥有 更好的可读性和可扩展性. 发生在继承关系中. 需要子类重写父类的方法. 父类类型的引用指向子类类型的对象. 自始至终,多态都是对于方法而言,对于类中的成员变量,没有多态的说法. 上篇说到:一个基类的引用变量接收不同子类的对象将会调用子类对应的方法,这其实就是动态绑定的过程.在理解动态绑定之前,先补充一些概

Java多态小总结

多态,又可以称为动态绑定,即在运行时确定类型,比如: 1 class A { 2 void draw(){ 3 //输出“A” 4 } 5 } 6 class B { 7 void draw(){ 8 //输出“B” 9 } 10 11 } 这种关系里,如果调用A a = new B(); 此时,被称为向上转型,a的类型可能在很早之前被生命,而在这时候被明确指明是其子类型, 我们如果要去调用draw()方法的时候,会调用输出“B”,这样,便是Java中的“多态”.我们称其为“向上转型”. 但是,

JAVA多态示例

这多态,我觉得是最利害的.在开发大型程序中. 但,也是需要经过足够多的实践经验才能随心利用的. class Quadrangle{ private Quadrangle[] qtest = new Quadrangle[6]; private int nextIndex = 0; public void draw(Quadrangle q){ if(nextIndex < qtest.length){ qtest[nextIndex] = q; System.out.println(nextIn