Java编程思想——多态

多态经过分离作什么和怎么作,从另外一角度将接口和实现分离出来。bash

向上转型

把某个对象的引用视为对其及类型的引用的作法被称做向上转型dom

//建立乐器基类
class Instrument{
    public void play(Note n){
        print("Instrument.play()");
    }
}

public class Wind extends Instrument{

    public void play(Note n){
        print("Wind.play()"+n);
    }
}

public class Brass extends Instrument{

    public void play(Note n){
        print("Brass.play()"+n);
    }
}

public class Music{
    public static void tune(Instrument i){
        i.play()
    }

    main(String[] args){
        Wind w = new Wind();
        tune(w) //Wind.play()
    }
}复制代码

Wind 是从Instrument继承的,因此Instrument的接口一定存在Wind中,从Wind向上转型到Instrument会“缩小”接口。ui

绑定

编译器怎么知道Instrument引用指向的是Wind对象,而不是Brass对象?spa

方法调用绑定

绑定:将一个方法调用与方法主体关联起来称做绑定。code

  • 前期绑定:程序执行前进行绑定
  • 后期绑定(动态绑定):运行时根据对象的类型进行绑定
    Java中除了static和final方法以外,其余全部的方法都是后期绑定
//基类
public class Shape{
    public void draw(){

    }
    public void erase(){

    }
}

public class Circle extends Shape{
    public void draw(){
        print("Circle draw");
    }
    public void erase(){
        print("Circle erase");
    }
}

public class Square extends Shape{
    public void draw(){
        print("Square draw");
    }
    public void erase(){
        print("Square erase");
    }
}

public class Triangle extends Shape{
    public void draw(){
        print("Triangle draw");
    }
    public void erase(){
        print("Triangle erase");
    }
}

public class RandomShape{


}复制代码
相关文章
相关标签/搜索