JavaSE 几个常见术语区别
覆寫(override)
一個實例方法可以覆寫(override)在其超類中可訪問到的具有相同簽名的所有實例方法,從而使能了動態分派(dynamic dispatch);換句話說,VM 將基于實例的運行期類型來選擇要調用的覆寫方法。覆寫是面向對象編程技術的基礎,并且是唯一沒有被普遍勸阻的名字重用形式:
class Base {
public void f() { }
}
class Derived extends Base {
public void f() { } // overrides Base.f()
}
隱藏(hide)
一個域、靜態方法或成員類型可以分別隱藏(hide)在其超類中可訪問到的具有相同名字(對方法而言就是相同的方法簽名)的所有域、靜態方法或成員類型。隱藏一個成員將阻止其被繼承:
class Base {
public static void f() { }
}
class Derived extends Base {
private static void f() { } // hides Base.f()
}
重載(overload)
在某個類中的方法可以重載(overload)另一個方法,只要它們具有相同的名字和不同的簽名。由調用所指定的重載方法是在編譯期選定的:
class CircuitBreaker {
public void f(int i) { } // int overloading
public void f(String s) { } // String overloading
}
遮蔽(shadow)
一個變量、方法或類型可以分別遮蔽(shadow)在一個閉合的文本范圍內的具有相同名字的所有變量、方法或類型。如果一個實體被遮蔽了,那么你用它的簡單名是無法引用到它的;根據實體的不同,有時你根本就無法引用到它:
class WhoKnows {
static String sentence = "I don't know.";
public static woid main(String[ ] args) {
String sentence = “I know!”; // shadows static field
System.out.println(sentence); // prints local variable
}
}
盡管遮蔽通常是被勸阻的,但是有一種通用的慣用法確實涉及遮蔽。構造器經常將來自其所在類的某個域名重用為一個參數,以傳遞這個命名域的值。這種慣用法并不是沒有風險,但是大多數Java 程序員都認為這種風格帶來的實惠要超過其風險:
class Belt {
private final int size;
public Belt(int size) { // Parameter shadows
Belt.sizethis.size = size;
}}
遮掩(obscure)
一個變量可以遮掩具有相同名字的一個類型,只要它們都在同一個范圍內:如果這個名字被用于變量與類型都被許可的范圍,那么它將引用到變量上。相似地,一個變量或一個類型可以遮掩一個包。遮掩是唯一一種兩個名字位于不同的名字空間的名字重用形式,這些名字空間包括:變量、包、方法或類型。如果一個類型或一個包被遮掩了,那么你不能通過其簡單名引用到它,除非是在這樣一個上下文環境中,即語法只允許在其名字空間中出現一種名字。遵守命名習慣就可以極大地消除產生遮掩的可能性:
public class Obscure {
static String System; // Obscures type java.lang.System
public static void main(String[ ] args) {// Next line won't compile: System refers to static field
System.out.println(“hello, obscure world!”);
}}
轉載于:https://www.cnblogs.com/tom0/archive/2013/04/26/3043858.html
總結
以上是生活随笔為你收集整理的JavaSE 几个常见术语区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP 入门
- 下一篇: IOS将字符串转换为日期时间格式