Java overload和override的區別分析
方法的重寫(Overriding)和重載(Overloading)是Java多態性的不一樣表現。重寫(Overriding)是父類與子類之間多態性的一種表現,而重載(Overloading)是一個類中多態性的一種表現。
若是在子類中定義某方法與其父類有相同的名稱和參數,咱們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。
若是在一個類中定義了多個同名的方法,它們或有不一樣的參數個數或有不一樣的參數類型或有不一樣的參數次序,則稱爲方法的重載(Overloading)。不能經過訪問權限、返回類型、拋出的異常進行重載.
1.方法重載(overload)
概念:簡單的說:方法重載就是類的同一種功能的多種實現方式,到底採用哪一種方式,取決於調用者給出的參數。
注意事項:
(1)方法名相同
(2)方法的參數類型、個數、順序不至少有一項不一樣
(3)方法返回類型能夠不一樣
(4)方法的修飾符能夠不一樣
若是隻是返回類型不同,不可以構成重載
若是隻是控制訪問修飾符號不同,也是不能構成重載的
Overloaded的方法是能夠改變返回值的類型。
2.方法覆蓋(override)
概念:簡單的說:方法覆蓋就是子類有一個方法,和父類的某個方法的名稱、返回類型、參數同樣,那麼咱們就說子類的這個方法覆蓋了父類的那個方法。
注意事項:方法覆蓋有不少條件,總的講有兩點必定要注意:
(1)子類的方法的返回類型,參數,方法名稱,要和父類方法的返回類型,參數,方法名稱徹底同樣,不然編譯出錯。
(2) 子類方法不能縮小父類方法的訪問權限(反過來是能夠的)
例:
Overrride實例 ide
class A {
public
int getVal() {
return (
5);
}
}
class B
extends A {
public
int getVal() {
return (
10);
}
}
class Override {
public
static
void main(String[] args) {
B b
=
new B();
A a
= (A) b;
// 把 b 強 制轉換成A的類型
int x
= a.getVal();
System.out.println(x);
}
}
Overload實例
// ackage 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);
}
}