javascript 与 java继承问题

java里是没有多继承的,即一个子类不能同时继承多个父类,但可以实现多个接口,这也间接的实现了多继承。 

关键字 extends 继承,implements 接口

使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。

 (接口是一些抽象方法的集合,编写接口时不需要实现方法,只需要声 明方法名即可,在需要使用接口提供的功能的类中去覆盖或实现这些方法,接口只是一个协议,继承接口了就必须实现接口内的所有方法)

public class Animal { 
 public
Animal(String myName) {
  name = myName;
}
  public void eat(){
  
System.out.println(name+"正在吃");
}

public class Dog extends
Animal { }

 

public interface A {
    public void eat();
}
 
public interface B {
    public void show();
}
public class C implements A,B {
}

 

而javascript是可以利用call方法和prototype属性来实现多继承的。继承方法与单继承相似,只是将需要继承的多个父类依次实现,另外对于 
属性或共有方法重命的时候,以最后继承的属性和方法为主。后面的会覆盖前面的继承:

<script type="text/javascript">
    function A(name,age){
        this.name = name;
        this.age = age;    
        this.weight = 120;
    }
    //通过原型 添加方法
    A.prototype.say = function(){
        alert(111);
    }
    function B(name,age,sex){
        this.name = name;
        this.age = age;
        this.sex =sex;
        this.weight = 130;
    }
    B.prototype.say = function(){
        alert(222);
    }
    function C(name,age,sex){
        //这里用call 不能继承 父类新增的 方法
//                A.call(this,name,age);
//                B.call(this,name,age,sex);
        var  a = new A(name,age);
        var  b = new B(name,age,sex);
        //便利对象 中的所有属性和方法,赋值给C
        for(var i in a){
            C.prototype[i] = a[i];
        }                
        for(var j in b){
            C.prototype[j] = b[j];
        }
    }
    var  c = new C('xm',18,5);
    console.log(c);
    c.say();//alert(222)
</script>

结果: 

 

posted @ 2017-03-03 15:43  虔诚_k  阅读(706)  评论(0编辑  收藏  举报