簡單的講,多態就是同一種功能具有多種實現方式。
多態有兩種類型:同一個類中某個行為的多種實現方式;不同子類對相同行為的不同的實現方式。
1、同一個類中某個行為的多種實現方式
在實現某個功能的時候可以採用不同的方式,通常採用相同的名字,而參數不同。例如要初始化一個矩形,可以給出左上方的座標和矩形的長寬,也可以給出左上方的座標和右下角的座標。
public class Rectangle{
private int left; // 左上方橫座標
private int top; //左上方縱座標
private int width; // 寬
private int height; // 高
public void initiate(int left,int top,int width,int height){
this.top = top;
this.left = left;
this.width = width;
this.height = height;
}
public void initiate(Point lefttop,Point rightbottom){
top = lefttop.getY();
left = lefttop.getX();
width = rightbottom.getX() - lefttop.getX();
height = rightbottom.getY() - lefttop.getY();
}
}
另外,可以考慮構造方法。構造方法用於構造對象,有各種不同的構造對象的方法,所以會有多種構造方法,多個構造方法都是用於構造對象,這就是多態。
2、不同子類有不同的實現方式
在上一講中描述的圖形類的畫圖方法以及交通工具的移動方法都是多態的典型例子。
對於圖形類,具有畫圖的方法,但是三角形、矩形和圓的畫法不同,所以會有不同的實現方式。這種多態與上面介紹同一個類中某個功能的多個實現方式不同,前面是同類的某個功能的不同實現方式,而現在是不同子類的不同實現方式。下面以計算面積為例介紹。
public abstract class Graphics{
public abstract void print(); // 畫圖的方法
public abstract float area(); //計算面積
}
public class Circle extends Graphics{
private int r; //
private int left; // 圓心的左上方橫座標
private int top; // 圓心的左上方縱座標
public void print(){
...
}
public float area(){
return 3.1415*r*r;
}
}
public class Rectangle extends Graphics{
private int left; // 圓心的左上方橫座標
private int top; // 圓心的左上方縱座標
private int width; // 寬
private int height; // 高
public void print(){
...
}
public float area(){
return height*width;
}
}
3、多態性的應用
對於上面第一種形式的多態,方法的調用通過對象名字,要調用哪個方法就寫相應的方法名字並提供相應的參數即可。對於第二種形式的多態,如果分別定義子類的對象然後調用相應的方法,與其他普通的方法就沒有什麼區別了,例如下面的代碼:
public static void main(String[] args){
Circle circle = new Circle(); // 建立圓對象
circle.setTop(20); // 此行及以下兩行用於初始化
circle.setLeft(30);
circle.setR(10);
System.out.println(circle.area()); //調用計算面積的方法並輸出
Rectangle rectangle = new Rectangle ();
rectangle .setTop(20);
rectangle .setLeft(30);
rectangle .setWidth(10);
rectangle .setHeight(10);
System.out.println(rectangle.area());
}
那多態性如何體現呢?請看下次的向上轉型和強制類型轉換。
上一次:第三十八講 抽象類別與抽象方法下一次:
第四十講 向上轉型和強制類型轉換李緒成 CSDN Blog:http://blog.csdn.net/javaeeteacher邀請您為好友:http://student.csdn.net/invite.php?u=124362&c=7be8ba2b6f3b6cc5