多态

1.含义:

同一个操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果,

2.例子

1).最普通的"多态"

var makeSound = function(animal){
    if(animal instance of Duck){
        console.log("duck duck...")
    }else if(animal instance of Chicken){
        console.log("chicken chicken...")
    }
};

var Duck = function(){};
var Chicken = function(){};

makeSound( new Duck() );
makeSound( new Chicken() );

2).对象的多态性

var makeSound = function( animal ){
    animal.sound();
}

var Duck = function(){}
Duck.prototype.sound = function(){
    console.log("duck duck...");
}

var Chicken = function(){}
Chicken.prototype.sound = function(){
    console.log("chicken chicken...")
}

makeSound( new Duck() );
makeSound( new Chicken() );

3.多态与继承的关系

因为js与oc这些是动态语言,不必要进行类型检查。但如果想java这些静态语言,makeSound方法的入参就必须指定变量类型。所以指定duck的时候,传入chicken会报错。这个使用就需要使用继承得到多态效果。

public abstract class Animal{
    abstract void makeSound(); //抽象方法
}

public class Chicken extends Animal{
    public void makeSound(){
        System.out.println(chicken chicken...);
    }
}

public class Duck extends Animal{
    public void makeSound(){
        System.out.println(duck duck...);
    }
}


public class AnimalSound{
    public void makeSound( Animal animal ){
        animal.makeSound();
    }
}

public class Test{
    public static void main(String args[]){
        AnimalSound animalSound = new AnimalSound();
        Animal duck = new Duck();
        Animal chicken = new Chicken();
        animalSound.makeSound(duck);
        animalSound.makeSound(chicken);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 多态性(简化代码) - 多态的规则:里氏替换原则(子类替换父类方法:只是多态表现);多态的特性:父类保存了子类的对...
    010_purple阅读 802评论 0 3
  • 1.面向对象三大特性 -封装性 -继承性 -多态性 2.什么是封装 封装性就是隐藏实现细节,仅对外公开接口。 3....
    梦夜繁星阅读 1,129评论 0 6
  • 本文先对es6发布之前javascript各种继承实现方式进行深入的分析比较,然后再介绍es6中对类继承的支持以及...
    lazydu阅读 16,745评论 7 44
  • 一、继承 当两个事物之间存在一定的所属关系,即就像孩子从父母那里得到遗传基因一样,当然,java要遗传的更完美,这...
    玉圣阅读 1,087评论 0 2
  • 对于一门强类型的静态语言来说,要想通过运行时多态来隔离变化,多个实现类就必须属于同一类型体系。也就是说,它们必须通...
    _袁英杰_阅读 3,631评论 2 9