一、多态
前面提到,多态就是在执行同一操作且作用于不同对象时,返回不同的结果。
1、使用多态实现的思路
- 编写父类
- 编写子类,子类重写父类的方法。
- 运行时,使用父类的类型,子类的对象。
注:向上转型(子类转换成父类)
Pet pet=new Dog();
向下转型,(强制转换)(父类转换成子类)
Dog dog=(Dog)pet
强制转换一般结合intanceof 结合使用,语法:对象 intanceof 类或接口。用来判断前面的是否属于后面的类型。一般用于子类所特有的方法时候,在测试类中需要调用这个子类特有的方法时候,需要强制转换。
2、实现多态的两种形式
- 使用父类作为方法形参实现多态。
- 使用父类作为方法返回值实现多态。
3、实现多态的好处
多态可以减少类中的代码量,可以提高代码的可扩展性和可维护性
废话不多说,直接上代码,以便理解:
function dwn(s){
document.write(s+"<br/>");
}
function Animal(){
this.bite=function(){
dwn("animal bite!");
}
}
function Cat(){
this.bite=function(){
dwn("Cat bite!");
}
}
Cat.prototype=new Animal(); ///inherit Animal
function Dog(){
this.bite=function(){
dwn("Dog bite");
}
}
Dog.prototype=new Animal(); ///inherit Animal
function AnimalBite(animal){
if(animal instanceof Animal) //这里是判断animal的原型是否指向Animal
animal.bite();
}
var cat = new Cat();
var dog = new Dog();
AnimalBite(cat);
AnimalBite(dog);
//最终输出的结果如下:
/*
Cat bite!
Dog bite
*/