當前位置:首頁 » 編程語言 » java重載函數

java重載函數

發布時間: 2023-01-24 04:50:04

java中方法重載和重寫的區別和定義

1、重載
1)方法重載是讓類以統一的方式處理不同類型數據的一種手段。多個同名函數同時存在,具有不同的參數個數/類型。重載Overloading是一個類中多態性的一種表現。
2) Java的方法重載,就是在類中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法, 這就是多態性。
3) 重載的時候,方法名要一樣,但是參數類型和個數不一樣,返回值類型可以相同也可以不相同。無法以返回型別作為重載函數的區分標准。
2、重寫
1) 父類與子類之間的多態性,對父類的函數進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。
但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。方法重寫又稱方法覆蓋。
2)若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。
3)子類函數的訪問修飾許可權不能少於父類的;

重寫與重載的區別在於:
重寫多態性起作用,對調用被重載過的方法可以大大減少代碼的輸入量,同一個方法名只要往裡面傳遞不同的參數就可以擁有不同的功能或返回值。
用好重寫和重載可以設計一個結構清晰而簡潔的類,可以說重寫和重載在編寫代碼過程中的作用非同一般.

Ⅱ java介面中可以定義重載函數嗎

可以重載函數。多個方法擁有相同的名字,但在名字相同的同時,必須有不同的參數,這就是重載。

例如:

publicinterfaceA{//定義介面
publicvoidshow();//定義show方法
publicvoidshow(inta);//多了一個參數,重載show方法
}

Ⅲ java中重載有什麼用

在Java 中,同一個類中的2個或2個以上的方法可以有同一個名字,只要它們的參數聲明不同即可。在這種情況下,該方法就被稱為重載(overloaded ),這個過程稱為方法重載(method overloading )。方法重載是Java 實現多態性的一種方式。如果你以前從來沒有使用過一種允許方法重載的語言,這個概念最初可能有點奇怪。但是你將看到,方法重載是Java 最激動人心和最有用的特性之一。

當一個重載方法被調用時,Java 用參數的類型和(或)數量來表明實際調用的重載方法的版本。因此,每個重載方法的參數的類型和(或)數量必須是不同的。雖然每個重載方法可以有不同的返回類型,但返回類型並不足以區分所使用的是哪個方法。當Java 調用一個重載方法時,參數與調用參數匹配的方法被執行。

下面是一個說明方法重載的簡單例子:

// Demonstrate method overloading.
class OverloadDemo {
void test() {
System.out.println("No parameters");
}

// Overload test for one integer parameter.
void test(int a) {
System.out.println("a: " + a);
}

// Overload test for two integer parameters. void test(int a,int b) { System.out.println("a and b: " + a + " " + b);}

// overload test for a double parameter

double test(double a) {

System.out.println("double a: " + a);

return a*a; }}

class Overload {

public static void main(String args[]) {
OverloadDemo ob = new OverloadDemo();
double result;

// call all versions of test()ob.test();ob.test(10);ob.test(10,20);result = ob.test(123.25);System.out.println("Result of ob.test(123.25): " + result);

}
}

該程序產生如下輸出:

No parameters

a: 10
a and b: 10 20
double a: 123.25
Result of ob.test(123.25): 15190.5625

從上述程序可見,test()被重載了四次。第一個版本沒有參數,第二個版本有一個整型參數,第三個版本有兩個整型參數,第四個版本有一個double 型參數。由於重載不受方法的返回類型的影響,test()第四個版本也返回了一個和重載沒有因果關系的值。

當一個重載的方法被調用時,Java 在調用方法的參數和方法的自變數之間尋找匹配。但是,這種匹配並不總是精確的。在一些情況下,Java 的自動類型轉換也適用於重載方法的自變數。例如,看下面的程序:

// Automatic type conversions apply to overloading.
class OverloadDemo {
void test() {
System.out.println("No parameters");
}

// Overload test for two integer parameters. void test(int a,int b) { System.out.println("a and b: " + a + " " + b);}

// overload test for a double parameter
void test(double a) {
System.out.println("Inside test(double) a: " + a);
}
}

class Overload {

public static void main(String args[]) {
OverloadDemo ob = new OverloadDemo();
int i = 88;

ob.test();ob.test(10,20);
ob.test(i); // this will invoke test(double)
ob.test(123.2); // this will invoke test(double)
}
}

該程序產生如下輸出:

No parameters
a and b: 10 20
Inside test(double) a: 88
Inside test(double) a: 123.2

在本例中,OverloadDemo 的這個版本沒有定義test(int) 。因此當在Overload 內帶整數參數調用test()時,找不到和它匹配的方法。但是,Java 可以自動地將整數轉換為double 型,這種轉換就可以解決這個問題。因此,在test(int) 找不到以後,Java 將i擴大到double 型,然後調用test(double) 。當然,如果定義了test(int) ,當然先調用test(int) 而不會調用test(double) 。只有在找不到精確匹配時,Java 的自動轉換才會起作用。

方法重載支持多態性,因為它是Java 實現「一個介面,多個方法」范型的一種方式。要理解這一點,考慮下面這段話:在不支持方法重載的語言中,每個方法必須有一個惟一的名字。但是,你經常希望實現數據類型不同但本質上相同的方法。可以參考絕對值函數的例子。在不支持重載的語言中,通常會含有這個函數的三個及三個以上的版本,每個版本都有一個差別甚微的名字。例如,在C語言中,函數abs( )返回整數的絕對值,labs( ) 返回long 型整數的絕對值( ),而fabs( )返回浮點值的絕對值。盡管這三個函數的功能實質上是一樣的,但是因為C語言不支持重載,每個函數都要有它自己的名字。這樣就使得概念情況復雜許多。盡管每一個函數潛在的概念是相同的,你仍然不得不記住這三個名字。在Java 中就不會發生這種情況,因為所有的絕對值函數可以使用同一個名字。確實,Java 的標準的類庫包含一個絕對值方法,叫做abs ( )。這個方法被Java 的math 類重載,用於處理數字類型。Java 根據參數類型決定調用的abs()的版本。

重載的價值在於它允許相關的方法可以使用同一個名字來訪問。因此,abs這個名字代表了它執行的通用動作(general action )。為特定環境選擇正確的指定(specific )版本是編譯器要做的事情。作為程序員的你,只需要記住執行的通用操作就行了。通過多態性的應用,幾個名字減少為一個。盡管這個例子相當簡單,但如果你將這個概念擴展一下,你就會理解重載能夠幫助你解決更復雜的問題。

當你重載一個方法時,該方法的每個版本都能夠執行你想要的任何動作。沒有什麼規定要求重載方法之間必須互相關聯。但是,從風格上來說,方法重載還是暗示了一種關系。這就是當你能夠使用同一個名字重載無關的方法時,你不應該這么做。例如,你可以使用sqr這個名字來創建一種方法,該方法返回一個整數的平方和一個浮點數值的平方根。但是這兩種操作在功能上是不同的。按照這種方式應用方法就違背了它的初衷。在實際的編程中,你應該只重載相互之間關系緊密的操作。

7.1.1 構造函數重載
除了重載正常的方法外,構造函數也能夠重載。實際上,對於大多數你創建的現實的

類,重載構造函數是很常見的,並不是什麼例外。為了理解為什麼會這樣,讓我們回想上一章中舉過的Box類例子。下面是最新版本的Box類的例子:

class Box { double width; double height; double depth;

// This is the constructor for Box.

Box(double w,double h,double d) {width = w; height = h;depth = d;

}

// compute and return volume double volume() { return width * height * depth;}}

在本例中,Box() 構造函數需要三個自變數,這意味著定義的所有Box對象必須給Box() 構造函數傳遞三個參數。例如,下面的語句在當前情況下是無效的:

Box ob = new Box();

因為Box( )要求有三個參數,因此如果不帶參數的調用它則是一個錯誤。這會引起一些重要的問題。如果你只想要一個盒子而不在乎 (或知道)它的原始的尺寸該怎麼辦?或,如果你想用僅僅一個值來初始化一個立方體,而該值可以被用作它的所有的三個尺寸又該怎麼辦?如果Box 類是像現在這樣寫的,與此類似的其他問題你都沒有辦法解決,因為你只能帶三個參數而沒有別的選擇權。

幸好,解決這些問題的方案是相當容易的:重載Box 構造函數,使它能處理剛才描述的情況。下面程序是Box 的一個改進版本,它就是運用對Box構造函數的重載來解決這些問題的:

/* Here,Box defines three constructors to initialize

the dimensions of a box various ways.
*/
class Box {

double width; double height; double depth; // constructor used when all dimensions specified Box(double w,double h,double d) {

width = w;
height = h;
depth = d;

}

// constructor used when no dimensions specified Box() { width = -1; // use -1 to indicate
height = -1; // an uninitialized
depth = -1; // box
}

// constructor used when cube is created Box(double len) { width = height = depth = len;}

// compute and return volume double volume() { return width * height * depth;}}

class OverloadCons {

public static void main(String args[]) { // create boxes using the various constructorsBox mybox1 = new Box(10,20,15);Box mybox2 = new Box();Box mycube = new Box(7);

double vol;

// get volume of first box
vol = mybox1.volume();
System.out.println("Volume of mybox1 is " + vol);

// get volume of second box
vol = mybox2.volume();
System.out.println("Volume of mybox2 is " + vol);
// get volume of cube
vol = mycube.volume();
System.out.println("Volume of mycube is " + vol);

}
}

該程序產生的輸出如下所示:

Volume of mybox1 is 3000.0
Volume of mybox2 is -1.0
Volume of mycube is 343.0

在本例中,當new執行時,根據指定的自變數調用適當的構造函數。

Ⅳ java 重載和重寫的區別

1.定義區別:

①重載是指不同的函數使用相同的函數名,但是函數的參數個數或類型不同。調用的時候根據函數的參數來區別不同的函數。

②覆蓋(也叫重寫)是指在派生類中重新對基類中的虛函數(注意是虛函數)重新實現。即函數名和參數都一樣,只是函數的實現體不一樣。

2.類的關系區別

覆蓋是子類和父類之間的關系,是垂直關系;重載是同一個類中方法之間的關系,是水平關系。

3.產生方法區別

覆蓋只能由一個方法或只能由一對方法產生關系;重載是多個方法之間的關系。

4.參數列表要求區別

覆蓋要求參數列表相同;重載要求參數列表不同。

5.調用方法區別

覆蓋關系中,調用方法體是根據對象的類型來決定;而重載關系是根據調用時的實參表與形參表來選擇方法體的。

(4)java重載函數擴展閱讀

方法的重寫:

1、在子類中可以根據需要對從基類中繼承來的方法進行重寫。

2、重寫的方法和被重寫的方法必須具有相同方法名稱、參數列表和返回類型。(註:返回值可以為父類中返回值的子類型.參數若為子類,則不是重寫是重載)

3、重寫方法不能使用比被重寫的方法更嚴格的訪問許可權。

4. 重寫方法不能聲明拋出比被重寫方法范圍更大的異常類型。

總結:重寫是子類對所繼承父類相同方法的一種更改,這個更改需要遵循格式按照父類的格式,訪問許可權,拋出異常等等,都在父類方法控制范圍內,內部具體實現可以實現不同的效果。

Ⅳ java函數重載中 父子類的函數名相同 參數不同對嗎

函數重載(overload)是指多個名稱相同而參數數量或類型不同的函數。要注意它與函數重寫(override)的區別。函數重載和類的繼承無關。

Ⅵ java中方法的重載是什麼意思

覆蓋是override方法重寫 重載是overload
按照教科書上的定義,重載就是具有相同函數名,返回類型可以不同,參數個數、順序、類型不同的函數。我的理解是重載是發生在兩個或者是更多的函數具有相同的名字的情況下。
重寫就是覆蓋父類的方法,和父類有相同返回類型,參數,甚至是拋出的異常,重寫方法不能為private,運用中最典型的就是對介面方法的覆蓋。方法的重寫Overriding和重載Overloading是Java多態性的不同表現.
重寫Overriding是父類和子類之間多態性的一種表現;如果在子類中定義某方法和其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding).子類的對象使用這個方法時,將調用子類中的定義,對他而言,父類中的定義如同被"屏蔽"了.
重載Overloading是個類中多態性的一種表現;如果在一個類中定義了多個同名的方法,他們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading).重載的方法是能改動返回值的類型.

現實例子:你對比上面看,比如一老爹是木工。兒子繼承老爹也是木工。
老爹有個做櫃子的獨特技術(方法),只需要用到工具錘子和木頭(參數),
兒子根據老爹這個做櫃子的技術延伸出很多種技術,他懶得再起名就也對外宣稱叫做櫃子獨特技術。
1個繼承自老爹,相同的方法名,相同的工具,但有自己的想法,工序有改動。兒子做木工活用到這個技術方法的話就叫重寫。
另外的自創,但也叫做櫃子獨特技術,但用工具不同有:
木頭。(兒子牛,不用錘子照樣做櫃子。。。)
鋸子,木頭。(也是木頭櫃子)
錘子,鐵皮。(鐵皮櫃子)
以上3中為重載。
明白?不明白給我發消息。呵呵~

Ⅶ java如果返回值類型不一樣,參數數量,不一樣,那算不算是重載呢

方法重載跟返回值類型和修飾符無關 Java的重載 是發生在本類中的,重載的條件是在本類中有多個方法名相同,但參數列表不同(可能是,參數個數不同,參數類型不同),跟返回值無關。

重載,簡單說,就是函數或者方法有相同的名稱,但是參數列表不相同的情形,這樣的同名不同參數的函數或者方法之間,互相稱之為重載函數或者方法。

重載(overloaded)和多態無關,真正和多態相關的是覆蓋(inheritance)。當派生類重新定義了基類的虛擬方法後,基類根據賦給它的不同的派生類引用,動態地調用屬於派生類的對應方法,這樣的方法調用在編譯期間是無法確定的。因此,這樣的方法地址是在運行期綁定的(動態綁定)。

重載只是一種語言特性,是一種語法規則,與多態無關,與面向對象也無關。不過針對所謂的第二種重載,有一個專門的名詞--重寫或重定義。重載與重寫的區別就在於是否覆蓋,重寫一般多發生在不同的類且存在繼承關系之間,而重載多是在一個類里或者一塊代碼段里。

Ⅷ Java函數重載只適用於構造函數嗎一般的類的方法可以重載嗎

方法重載是指在一個類中定義多個同名的方法,但要求每個方法具有不同的參數的類型或參數的個數。一般的方法完全可以重載。
同時注意和重寫的區別,重寫就是在子類中把父類本身有的方法重新寫一遍,在方法名,參數列表,返回類型(包括子類中方法的返回值是父類中方法返回值的子類時)都相同的情況下, 對方法體進行修改或重寫。

熱點內容
linux查看selinux狀態 發布:2025-07-20 13:36:35 瀏覽:914
福利資源解壓密碼 發布:2025-07-20 13:34:10 瀏覽:269
我的世界怎麼在手機搞伺服器 發布:2025-07-20 13:26:07 瀏覽:905
android系統鍵盤 發布:2025-07-20 13:19:38 瀏覽:500
程序化交易演算法 發布:2025-07-20 13:09:58 瀏覽:973
已關閉伺服器是什麼意思 發布:2025-07-20 13:06:49 瀏覽:709
三星s5密碼多少錢 發布:2025-07-20 12:55:14 瀏覽:961
密碼忘記了怎麼找回 發布:2025-07-20 12:46:18 瀏覽:534
華為的密碼鎖為什麼開不了 發布:2025-07-20 12:45:35 瀏覽:133
app登錄密碼在哪裡 發布:2025-07-20 12:22:31 瀏覽:693