<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Scott@JAVA

    Java, 一杯濃濃的咖啡伴你到深夜

    A Glossary of Name Reuse

    From <<Java Puzzlers>>, Chapter 8. Classier Puzzlers


    A Glossary of Name Reuse

    Most of the puzzles in this chapter were based on name reuse. This section summarizes the various forms of name reuse.

    Overriding

    An instance method overrides all accessible instance methods with the same signature in superclasses [JLS 8.4.8.1], enabling dynamic dispatch; in other words, the VM chooses which overriding to invoke based on an instance's run-time type [JLS 15.12.4.4]. Overriding is fundamental to object-oriented programming and is the only form of name reuse that is not generally discouraged:

    class Base {
    public void f() { }
    }
    class Derived extends Base {
    public void f() { } // overrrides Base.f()
    }
    

    Hiding

    A field, static method, or member type hides all accessible fields, static methods, or member types, respectively, with the same name (or, for methods, signature) in supertypes. Hiding a member prevents it from being inherited [JLS 8.3, 8.4.8.2, 8.5]:

    class Base {
    public static void f() { }
    }
    class Derived extends Base {
    public static void f() { } // hides Base.f()
    }
    

    Overloading

    Methods in a class overload one another if they have the same name and different signatures. The overloaded method designated by an invocation is selected at compile time [JLS 8.4.9, 15.12.2]:

    class CircuitBreaker {
    public void f(int i)    { } // int overloading
    public void f(String s) { } // String overloading
    }
    

    Shadowing

    A variable, method, or type shadows all variables, methods, or types, respectively, with the same name in a textually enclosing scope. If an entity is shadowed, you cannot refer to it by its simple name; depending on the entity, you cannot refer to it at all [JLS 6.3.1]:

    class WhoKnows {
    static String sentence = "I don't know.";
    public static void main(String[] args) {
    String sentence = "I know!";   // shadows static field
    System.out.println(sentence);  // prints local variable
    }
    }
    

    Although shadowing is generally discouraged, one common idiom does involve shadowing. Constructors often reuse a field name from their class as a parameter name to pass the value of the named field. This idiom is not without risk, but most Java programmers have decided that the stylistic benefits outweigh the risks:

    class Belt {
    private final int size;
    public Belt(int size) { // Parameter shadows Belt.size
    this.size = size;
    }
    }
    

    Obscuring

    A variable obscures a type with the same name if both are in scope: If the name is used where variables and types are permitted, it refers to the variable. Similarly, a variable or a type can obscure a package. Obscuring is the only kind of name reuse where the two names are in different namespaces: variables, packages, methods, or types. If a type or a package is obscured, you cannot refer to it by its simple name except in a context where the syntax allows only a name from its namespace. Adhering to the naming conventions largely eliminates obscuring [JLS 6.3.2, 6.5]:

    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!");
    }
    }
    

    posted on 2007-07-25 15:26 Scott@JAVA 閱讀(442) 評論(0)  編輯  收藏 所屬分類: Jave SE 6

    主站蜘蛛池模板: 亚洲国产日韩女人aaaaaa毛片在线| 不卡一卡二卡三亚洲| 亚洲精品在线电影| 久久精品视频免费看| 国产l精品国产亚洲区在线观看| 一出一进一爽一粗一大视频免费的 | 国产精品免费一级在线观看| 亚洲一线产区二线产区区| 欧美a级成人网站免费| 亚洲最大成人网色香蕉| 欧美好看的免费电影在线观看| 中文字幕亚洲码在线| 在线免费观看污网站| 国产亚洲精品AAAA片APP| 四虎成人精品在永久免费| 国产成人亚洲综合在线| 中文字幕在亚洲第一在线| 国产亚洲精品免费视频播放| 亚洲av中文无码乱人伦在线咪咕| 日本免费一区二区久久人人澡| 亚洲国产精品人久久| 精品国产无限资源免费观看| 自拍日韩亚洲一区在线| 国产福利免费在线观看| 国产免费AV片在线观看播放| 亚洲国产成人久久精品动漫| 青春禁区视频在线观看直播免费| 国产精品亚洲综合一区在线观看| 亚洲熟伦熟女新五十路熟妇| 免费成人高清在线视频| 亚洲区视频在线观看| 国产大片线上免费看| 成人精品一区二区三区不卡免费看 | 91精品国产免费入口| 亚洲国产精品无码久久98| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 日日夜夜精品免费视频| 成全视成人免费观看在线看| 亚洲国产模特在线播放| 亚洲精品无码久久不卡| 免费v片在线观看视频网站|