JAVA和遮掩_JAVA 你不知道的秘密 覆写,重载,隐藏,遮蔽,遮掩
覆寫(override)
一個(gè)實(shí)例方法可以覆寫(override)在其超類中可訪問(wèn)到的具有相同簽名的所有實(shí)例方法,從而使能了動(dòng)態(tài)分派(dynamic dispatch);換句話說(shuō),VM 將基于實(shí)例的運(yùn)行期類型來(lái)選擇要調(diào)用的覆寫方法。覆寫是面向?qū)ο缶幊碳夹g(shù)的基礎(chǔ),并且是唯一沒(méi)有被普遍勸阻的名字重用形式:
class Base {public void f() { }}class Derived extends Base {public void f() { } // overrides Base.f()}
隱藏(hide)
一個(gè)域、靜態(tài)方法或成員類型可以分別隱藏(hide)在其超類中可訪問(wèn)到的具有相同名字(對(duì)方法而言就是相同的方法簽名)的所有域、靜態(tài)方法或成員類型。隱藏一個(gè)成員將阻止其被繼承:
class Base {public static void f() { }}class Derived extends Base {private static void f() { } // hides Base.f()}
重載(overload)
在某個(gè)類中的方法可以重載(overload)另一個(gè)方法,只要它們具有相同的名字和不同的簽名。由調(diào)用所指定的重載方法是在編譯期選定的:
class CircuitBreaker {public void f(int i) { } // int overloadingpublic void f(String s) { } // String overloading}
遮蔽(shadow)
一個(gè)變量、方法或類型可以分別遮蔽(shadow)在一個(gè)閉合的文本范圍內(nèi)的具有相同名字的所有變量、方法或類型。如果一個(gè)實(shí)體被遮蔽了,那么你用它的簡(jiǎn)單名是無(wú)法引用到它的;根據(jù)實(shí)體的不同,有時(shí)你根本就無(wú)法引用到它:
class WhoKnows {static String sentence = "I don't know.";public static woid main(String[ ] args) {String sentence = “I know!”; // shadows static fieldSystem.out.println(sentence); // prints local variable}}
盡管遮蔽通常是被勸阻的,但是有一種通用的慣用法確實(shí)涉及遮蔽。構(gòu)造器經(jīng)常將來(lái)自其所在類的某個(gè)域名重用為一個(gè)參數(shù),以傳遞這個(gè)命名域的值。這種慣用法并不是沒(méi)有風(fēng)險(xiǎn),但是大多數(shù)Java 程序員都認(rèn)為這種風(fēng)格帶來(lái)的實(shí)惠要超過(guò)其風(fēng)險(xiǎn):
class Belt {private final int size;public Belt(int size) { // Parameter shadows Belt.sizethis.size = size;}}
遮掩(obscure)
一個(gè)變量可以遮掩具有相同名字的一個(gè)類型,只要它們都在同一個(gè)范圍內(nèi):如果這個(gè)名字被用于變量與類型都被許可的范圍,那么它將引用到變量上。相似地,一個(gè)變量或一個(gè)類型可以遮掩一個(gè)包。遮掩是唯一一種兩個(gè)名字位于不同的名字空間的名字重用形式,這些名字空間包括:變量、包、方法或類型。如果一個(gè)類型或一個(gè)包被遮掩了,那么你不能通過(guò)其簡(jiǎn)單名引用到它,除非是在這樣一個(gè)上下文環(huán)境中,即語(yǔ)法只允許在其名字空間中出現(xiàn)一種名字。遵守命名習(xí)慣就可以極大地消除產(chǎn)生遮掩的可能性:
public class Obscure {static String System; // Obscures type java.lang.Systempublic static void main(String[ ] args) {// Next line won't compile: System refers to static fieldSystem.out.println(“hello, obscure world!”);}}
總結(jié)
以上是生活随笔為你收集整理的JAVA和遮掩_JAVA 你不知道的秘密 覆写,重载,隐藏,遮蔽,遮掩的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 马斯克打造了一个“神奇项目”:给员工盖房
- 下一篇: 轻松上手系列教程java_小白也能轻松上