1. 程式人生 > >繼承,多型,過載和重寫的區別。

繼承,多型,過載和重寫的區別。

網上看到一個有趣的說法是:繼承是子類使用父類的方法,而多型則是父類使用子類的方法。
下面的例子包含了這四種實現:
class Triangle extends Shape {
 public int getSides() {
  return 3;
 }

}
class Rectangle extends Shape {
 public int getSides(int i) {
  return i;
 }

}
public class Shape {
 public boolean isSharp(){
  return true;
 }
 public int getSides(){
  return 0 ;
 }
 public int getSides(Triangle tri){
  return 3 ;
 }
 public int getSides(Rectangle rec){
  return 4 ;
 }

 public static void main(String[] args) {
  Triangle tri = new Triangle();
  System.out.println("Triangle is a type of sharp? " + tri.isSharp());

  Shape shape = new Triangle();
  System.out.println("My shape has " + shape.getSides() + " sides.");

 }
}
紅色是過載綠色是重寫藍色是繼承粉紅是多型
注意Triangle類的方法是重寫,而Rectangle類的方法是過載。
比較紅色的和粉紅的部分就可以發現多型對過載的優點:如果用過載,則在父類裡要對應每一個子類都過載一個取得邊數的方法;如果用多型,則父類只提供取得邊數的介面,至於取得哪個形狀的邊數,怎樣取得,在子類裡各自實現(重寫)。