override 與 overload 的區別+例子

zengbo0710發表於2007-05-21
override 是覆寫,overload 是過載。
override 是覆寫父類中的已經存在的方法,在完父類方法提供的功能上,加入新的內容,或完成修改方法提供的功能。
如:

class ClassA{
  public void draw(){
    ........
    System.out.println("ClassA.draw()");
  }
}

class ClassB extends ClassA { //從 ClassA 繼生一個 ClassB
  public void draw() {
    .......
    System.out.println("ClassB.draw()");
    super.draw();  // 關鍵字 super 表示父類 這裡為呼叫父類的 draw() 方法
  }
}


執行結果為:

ClassB.draw()
ClassA.draw()


注意:super 表示父類

一般override的比較多的有 equals()
Object 的定義如下:
public boolean equals(Object obj) {
  return (this == obj);
}

還有 finalize
protected void finalize() throws Throwable { }


overload 過載是在現在類的提供的引數上,加入新的引數功能。
最出名的就是 System.out.println() 了。
你可以用同樣的函式,輸出不同的資料型別
如: 字串  System.out.println("This is a TEST");
   日期物件  System.out.println(new Date());
   整型     System.out.println(500);
   布林型   System.out.println(obj1.equals(obj2));

定義就很簡單,就是定義幾個函式,不同的引數而已
如:

class ClassA {
  public void show(int value) {
    ....
  }

  public void show(String str) {
    .......
  }
}


常用的是在建構函式裡。
如:

class MyClass{
   public int value = 100;
   
   public MyClass(){
     System.out.println("Create Class MyClass.");
   }
   
   public MyClass(int Value){
    this();  //呼叫另一個構造器
   System.out.println("Class MyClass(Value)");
   value = Value;
   }
...
}


注意:這裡的 this(); 呼叫了另一個構造器


完整程式碼如下:

01
02
class MyClass{
03      public int value = 100;
04      
05      public MyClass(){
06         System.out.println("Create Class MyClass.");
07      }
08      
09      public MyClass(int Value){
10          this();  //呼叫另一個構造器
11          System.out.println("Class MyClass(Value)");
12          value = Value;
13      }
14      
15      public void draw(){
16          System.out.println("MyClass draw()");
17      }
18      
19      public boolean  equals(MyClass c) {
20         return (this.value == c.value);
21         super.equals(
22      }
23  }
24  
25  class MyClassA extends MyClass {
26      public void draw() {
27          System.out.println("MyClassA draw()");
28          super.draw();
29      }
30  }
31  
32  public class ClassTest {
33      public static void main(String[] args){
34          MyClass class1 = new MyClass();
35          MyClass class2 = new MyClass(120);
36          
37          class1.value = 120;
38          //class2.value = 120;
39          
40          System.out.println("class1 == class2 :" +(class1 == class2));
41          System.out.println("class1.equals(class2):" + class1.equals(class2) );
42          System.out.println("Test OK!");
43          
44          MyClassA class3 = new MyClassA();
45          class3.draw();
46      }
47  }
48  
49  

執行結果:

Create Class MyClass.
Create Class MyClass.
Class MyClass(Value)
class1 == class2 :false
class1.equals(class2):true
Test OK!
Create Class MyClass.
MyClassA draw()
MyClass draw()


{以上內容是本人編寫,如有不同意見,請留言} 
 

相關文章