重載與重寫的區別

重載(Overloading)


    (1) 方法重載是讓類以統一的方式處理不同類型數據的一種手段。多個同名函數同時存在,具有不同的參數個數/類型。

            重載Overloading是一個類中多態性的一種表現。


    (2) Java的方法重載,就是在類中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。

             調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法, 這就是多態性。


    (3) 重載的時候,方法名要一樣,但是參數類型和個數不一樣,返回值類型可以相同也可以不相同。無法以返回型別作爲              重載函數的區分標準。


    下面是重載的例子:
    package day02//這是包名

   //注意:除構造器以外,編譯器禁止在其他任何地方中調用構造器。

package day02;

/**
 * 構造器(Constructor) 構造方法
 * 構造器用於初始化對象,經常用於初始化對象的屬性
 * 構造器 Point(3, 4) 用於創建初始化Point對象,其中
 * (3,4) 是初始化參數,用於初始化Point對象的屬性
 * Point p = new Point(3, 4);


 * 構造器的語法: 
 *  1) 構造器的方法名必須與類名一樣
 *  2)可以有構造器參數,是創建對象的前提條件
 *    如:創建Point的前提條件是(3, 4)
 *  3) 不能聲明返回值類型
 *  4)使用new 運算調用,new 運算結果是對象實例
 *    如:new Point(3, 4)
 *  5) 構造器可以重載,參數一定不同。
 */
public class Demo05 {
public static void main(String[] args) {
Point1 p1 = new Point1(3,4);//調用構造器
System.out.println(p1.x + ","+p1.y);
Point1 p2 = new Point1(5,5);
System.out.println(p2.x + ","+p2.y);
Point1 p3 = new Point1(5);//方便一些
System.out.println(p3.x + ","+p3.y);
}
}
class Point1{
int x; int y;
/** 構造器: 創建點必須有x,y座標 */
public Point1(int x, int y) {
this.x = x; this.y = y;
}
/** 重載的構造器:創建對角線上的點 */
public Point1(int x){
this.x = x; this.y = x;
}
}

 

重寫(Overriding)


    (1) 父類與子類之間的多態性,對父類的函數進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。

但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。

方法重寫又稱方法覆蓋。


    (2)若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。

如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。


    (3)子類函數的訪問修飾權限不能少於父類的;
    下面是重寫與重載區別的例子

package day02;

/**
 * 比較 方法(Method) 和 構造方法(Constructor)(構造器) 
 * 語法方面
 * 1)構造器的名字,必須與類名一致!
 *   方法一般不與類名一致
 * 2)構造器不能聲明返回值,方法必須聲明返回值
 *  方法無返回值使用void聲明。
 * 3)方法是用引用調用,構造器使用new運算調用 
 * 用途功能方面
 * 1)方法是用來作爲對象的功能,如:點的移動,格子的下落
 * 2)構造器是用於創建初始化對象的。
 */
public class Demo06 {
public static void main(String[] args) {
Foo foo = new Foo(5);//調用構造器
foo.add();// 調用方法
System.out.println(foo.a);//6
}
}
class Foo{
int a;
public Foo(int a) {//Constructor
this.a = a;
}
public void add(){//Method
this.a++;
}
}

發佈了32 篇原創文章 · 獲贊 1 · 訪問量 1711
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章