Override:
(覆蓋)
1
、
Override
發生在繼承中,使得一個子類
Override
其父類的一個
method
。
2
、
Override Rules
:
Keeping the contract
。子類
override
父類的
method
時,必須要保證
overriding method
和父類中的
overridden method
具有相同的對外協議
contract
,即相同的參數列表和兼容的返回類型。
3
、
Arguments must be the same, and return types must be compatible.
4
、
The method can't be less accessible.
考慮如下情況:如果訪問權限變小了,如由父類
Parent
中的
public void test()
變成子類
Son
中的
private void test()
,如果編譯器允許權限變小,在某一類中有如下語句:
Parent?p = new Son()
;
p.test()
;則這些語句能夠通過編譯,當該類加載運行時,將會出現錯誤,因為父類
reference p
指向的是一子類
Son
的對象,而
Son
中的
test()
是
private
,不能在其他類中
invoke
。
??????
另外,上面的語句在編譯器允許權限變小情況下之所以能夠通過編譯,是因為在
“Parent?p = new Son()
;
”
中,聲明了一個父類
Parent
的
reference p
,由于
p
是父類的
reference
,由于父類中的
test()
是
public
,故
“p.test()
;
”
能夠通過編譯;而在運行時,
p
指向的是一個子類的對象,
p.test()
在運行時調用的是子類對象中的
test()
。
Overload
:(重載)
1
、重載:兩個或多個
methods
具有相同的
name
,
和
不同的
argument lists
。
2
、
The return types can be different.
3
、
You can't change ONLY the return type
:不能僅僅改變返回類型,
To overload a method, you MUST change the argument list, although you can change the return type to anything.
4
、
You can vary the access levels in any direction.