Le polymorphisme peut être implémenté de la même manière que l'héritage. Définissez d'abord une classe abstraite, qui appelle certaines méthodes virtuelles. Les méthodes virtuelles ne sont pas définies dans la classe abstraite, mais sont implémentées via sa classe d'implémentation spécifique.
Comme dans l'exemple suivant :
Object.extend=function(destination,source){ for(property in source){ destination[property]=source[property]; } return destination; } //定义一个抽象基类base,无构造函数 function base(){}; base.prototype={ initialize:function(){ this.oninit();//调用了一个虚方法 } } function SubClassA(){ //构造函数 } SubClassA.prototype=Object.extend({ propInSubClassA:"propInSubClassA", oninit:function(){ alert(this.propInSubClassA); } },base.prototype); function SubClassB(){ //构造函数 } SubClassB.prototype=Object.extend({ propInSubClassB:"propInSubClassB", oninit:function(){ alert(this.propInSubClassB); } },base.prototype); var objA=new SubClassA(); objA.initialize();//输出"propInSubClassA" var objB=new SubClassB(); objB.initialize();//输出"propInSubClassB"
Tout d'abord, une classe de base abstraite base est définie et la méthode oninit est appelée dans la méthode initialize de la classe de base, mais l'implémentation ou la déclaration de la méthode oninit n'est pas utilisée dans la classe de base. Les classes SubClassA et SubClassB héritent de la classe de base et implémentent la méthode oninit de différentes manières.