override 與overload 的區別
方法的重寫(Overriding)和過載(Overloading)是Java多型性的不同表現。
重寫(Overriding)是父類與子類之間多型性的一種表現,而過載(Overloading)是一個類中多型性的一種表現。
如果在子類中定義某方法與其父類有相同的名稱和引數,我們說該方法被重寫 (Overriding) 。子類的物件使用這個方法時,將呼叫子類中的定義,對它而言,父類中的定義如同被"遮蔽"了.
如果在一個類中定義了多個同名的方法,它們或有不同的引數個數或有不同的引數型別或有不同的引數次序,則稱為方法的過載(Overloading)。不能通過訪問許可權、返回型別、丟擲的異常進行過載.
1. Override 特點
1、覆蓋的方法的標誌必須要和被覆蓋的方法的標誌完全匹配,才能達到覆蓋的效果;
2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;
3、覆蓋的方法所丟擲的異常必須和被覆蓋方法的所丟擲的異常一致,或者是其子類;
4、被覆蓋的方法不能為private,否則在其子類中只是新定義了一個方法,並沒有對其進行覆蓋。
2.Overload 特點
1、在使用過載時只能通過不同的引數樣式。例如,不同的引數型別,不同的引數個數,不同的引數順序(當然,同一方法內的幾個引數型別必須不一樣,例如可以是fun(int, float), 但是不能為fun(int, int));
2、不能通過訪問許可權、返回型別、丟擲的異常進行過載;
3、方法的異常型別和數目不會對過載造成影響;
4、對於繼承來說,如果某一方法在父類中是訪問許可權是priavte,那麼就不能在子類對其進行過載,如果定義的話,也只是定義了一個新方法,而不會達到過載的效果。
Overrride例項
class A{
public int getVal(){
return(5);
}
}
class B extends A{
public int getVal(){
return(10);
}
}
public class override {
public static void main(String[] args) {
B b = new B();
A a= (A)b;//把 b 強 制轉換成A的型別
int x=a.getVal(); //列印10,這裡還有一個上轉型的問題(見http://blog.csdn.net/gnuhpc/archive/2009/11/05/4773224.aspx)
System.out.println(x);
}
}
Overload例項
package com.guonan;
//Demostrate method voerloading.
class OverloadDemo {
void test(){
System.out.println("NO parameters");
}
void test(int a){
System.out.println("a:"+a);
}//end of Overload test for one integer parameter.
void test(int a, int b){
System.out.println("a and b:"+a+" "+b);
}
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;
ob.test();
ob.test(10);
ob.test(10, 20);
result = ob.test(123.25);
System.out.println("Result of ob.test(123.25):"+result);
相關文章
- override與overload的區別IDE
- override 與 overload 的區別+例子IDE
- override與過載(overload)的區別IDE
- Overload 和 和 Override 的區別IDE
- 物件導向重寫(override)與過載(overload)區別物件IDE
- Java 重寫(Override)與過載(Overload)JavaIDE
- Java-override重寫與overload過載JavaIDE
- 19、Overload和Override的區別。Overloaded的方法是否可以改變返回值的型別?IDE型別
- 過載(Overload)和重寫(Override)的區別。過載的方法能否根據返回型別進行區分IDE型別
- override(重寫) and overload(過載)IDE
- Java 中的 override 和 overload,看這一篇就夠JavaIDE
- 一句話說明白C#中的new與override的區別C#IDE
- JAVA過載(overload)和覆蓋(override)中你所不知道的陷阱JavaIDE
- 二十二、SpringCloud分散式微服務雲架構之Java 重寫(Override)與過載(Overload)SpringGCCloud分散式微服務架構JavaIDE
- ??與?:的區別
- C#關鍵字之過載overload、重寫override、覆寫overwrite(new)詳解C#IDE
- MySQL的@與@@區別MySql
- mybatis #與$的區別MyBatis
- Null 與 “” 的區別Null
- &與&&, |與||區別
- in與exist , not in與not exist 的區別
- CentOS 與 Ubuntu 的區別CentOSUbuntu
- artice與section的區別
- GET 與 POST 的區別
- WebSocket 與 Socket 的區別Web
- Postgresql與MySQL的區別MySql
- chown與chmod的區別
- LESS與SASS的區別
- free 與 CFRelease 的區別
- gulp與webpack的區別Web
- @Autowired 與@Resource的區別
- let與var的區別
- post與get的區別
- HashSet與HashMap的區別HashMap
- maven與ant的區別Maven
- __new()__ 與 __init()__的區別
- TCP與UDP的區別TCPUDP
- Mysql與mongodb的區別MySqlMongoDB