亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? overloading overriding runtime type and object orientation (1).txt

?? 考取JAVA證件的資料
?? TXT
字號:
作者:jeru
email: jeru@163.net
日期:7/3/2001 10:01:58 AM
6)Overloading overriding runtime type and object orientation
Objective 1)
State the benefits of encapsulation in object oriented design and write code that implements tightly encapsulated classes and the relationships "is a" and "has a".

Encapsulation involves hiding data of a class and allowing access only through a public interface. 

The separation of interface and implementation makes it easier to modify the code within a class without breaking any other code that uses it.

encapsulation, inheritance, polymorphism are three principal characteristics of Object Oriented programming.

Implementing OO relationships
·    “is a” relationship is implemented by inheritance (extends keyword)
·    “has a” relationship is implemented by providing the class with member variables.

Overloading and Overriding
·    Overloading is an example of polymorphism. (operational / parametric)
·    Overriding is an example of runtime polymorphism (inclusive)
·    A method can have the same name as another method in the same class, provided it forms either a valid overload or override


Objective 2) 
Write code to invoke overridden or overloaded methods and parental or overloaded constructors; and describe the effect of invoking these methods.

Overloading    Overriding
Signature has to be different. Just a difference in return type is not enough.    Signature has to be the same. (including the return type)
Accessibility may vary freely.    Overriding methods cannot be more private than the overridden methods.
Exception list may vary freely.    Overriding methods may not throw more checked exceptions than the overridden methods.  But can throw no exception.
Just the name is reused. Methods are independent methods. Resolved at compile-time based on method signature.    Related directly to sub-classing. Overrides the parent class method. Resolved at run-time based on type of the object.
Can call each other by providing appropriate argument list.    Overriding method can call overridden method by super.methodName(), this can be used only to access the immediate super-class’s method. super.super won’t work. Also, a class outside the inheritance hierarchy can’t use this technique.
Methods can be static or non-static. Since the methods are independent, it doesn’t matter. But if two methods have the same signature, declaring one as static and another as non-static does not provide a valid overload. It’s a compile time error.    static methods don’t participate in overriding, since they are resolved at compile time based on the type of reference variable. A static method in a sub-class can’t use ‘super’ (for the same reason that it can’t use ‘this’ for)Remember that a static method can’t be overridden to be non-static and a non-static method can’t be overridden to be static. In other words, a static method and a non-static method cannot have the same name and signature (if signatures are different, it would have formed a valid overload)
There’s no limit on number of overloaded methods a class can have.    Each parent class method may be overridden at most once in any sub-class. (That is, you cannot have two identical methods in the same class)


·    Variables can also be overridden, it’s known as shadowing or hiding. But, member variable references are resolved at compile-time. So at the runtime, if the class of the object referred by a parent class reference variable, is in fact a sub-class having a shadowing member variable, only the parent class variable is accessed, since it’s already resolved at compile time based on the reference variable type. Only methods are resolved at run-time.

public class Shadow {
  public static void main(String s[]) {
    S1 s1 = new S1();
    S2 s2 = new S2();
    
    System.out.println(s1.s); // prints S1
    System.out.println(s1.getS()); // prints S1
    System.out.println(s2.s); // prints S2
    System.out.println(s2.getS()); // prints S2

    s1 = s2;
    System.out.println(s1.s); // prints S1, not S2 - 
                      // since variable is resolved at compile time
    System.out.println(s1.getS()); // prints S2 - 
                     // since method is resolved at run time    
  }
}

class S1 {
  public String s = "S1";
  public String getS() {
    return s;
  }
}

class S2 extends S1{
  public String s = "S2";
  public String getS() {
    return s;
  }
}
In the above code, if we didn’t have the overriding getS() method in the sub-class and if we call the method from sub-class reference variable, the method will return only the super-class member variable value. For explanation, see the following point.

·    Also, methods access variables only in context of the class of the object they belong to. If a sub-class method calls explicitly a super class method, the super class method always will access the super-class variable. Super class methods will not access the shadowing variables declared in subclasses because they don’t know about them. (When an object is created, instances of all its super-classes are also created.) But the method accessed will be again subject to dynamic lookup. It is always decided at runtime which implementation is called. (Only static methods are resolved at compile-time)

public class Shadow2 {
  String s = "main";
  public static void main(String s[]) {
    S2 s2 = new S2();
    s2.display();  // Produces an output – S1, S2

    S1 s1 = new S1();
    System.out.println(s1.getS()); // prints S1
    System.out.println(s2.getS()); // prints S1 – since super-class method always 
     // accesses super-class variable

  }
}

class S1 {
  String s = "S1";
  public String getS() {
    return s;
  }
  void display() {
    System.out.println(s);
  }
}

class S2 extends S1{
  String s = "S2";
  void display() {
    super.display();   // Prints S1
    System.out.println(s); // prints S2
  }
}

·    With OO languages, the class of the object may not be known at compile-time (by virtue of inheritance). JVM from the start is designed to support OO. So, the JVM insures that the method called will be from the real class of the object (not with the variable type declared). This is accomplished by virtual method invocation (late binding). Compiler will form the argument list and produce one method invocation instruction – its job is over. The job of identifying and calling the proper target code is performed by JVM.
·    JVM knows about the variable’s real type at any time since when it allocates memory for an object, it also marks the type with it. Objects always know ‘who they are’. This is the basis of instanceof operator.
·    Sub-classes can use super keyword to access the shadowed variables in super-classes. This technique allows for accessing only the immediate super-class. super.super is not valid. But casting the ‘this’ reference to classes up above the hierarchy will do the trick. By this way, variables in super-classes above any level can be accessed from a sub-class, since variables are resolved at compile time, when we cast the ‘this’ reference to a super-super-class, the compiler binds the super-super-class variable. But this technique is not possible with methods since methods are resolved always at runtime, and the method gets called depends on the type of object, not the type of reference variable. So it is not at all possible to access a method in a super-super-class from a subclass.

public class ShadowTest {
    public static void main(String s[]){
        new STChild().demo();
    }
}
class STGrandParent {
    double wealth = 50000.00;
    public double getWealth() {
        System.out.println("GrandParent-" + wealth);
        return wealth;
    }
}
class STParent extends STGrandParent {
    double wealth = 100000.00;
    public double getWealth() {
        System.out.println("Parent-" + wealth);
        return wealth;
    }
}
class STChild extends STParent {
    double wealth = 200000.00;

    public double getWealth() {
        System.out.println("Child-" + wealth);
        return wealth;
    }

    public void demo() {
        getWealth(); // Calls Child method
        super.getWealth(); // Calls Parent method
        //super.super.getWealth(); // Compiler error, GrandParent method cannot be accessed
        ((STParent)this).getWealth(); // Calls Child method, due to dynamic method lookup
    ((STGrandParent)this).getWealth(); // Calls Child method, due to dynamic method
      // lookup

        System.out.println(wealth); // Prints Child wealth
        System.out.println(super.wealth); // Prints Parent wealth
        System.out.println(((STParent)(this)).wealth); // Prints Parent wealth
        System.out.println(((STGrandParent)(this)).wealth); // Prints GrandParent wealth
    }
}

·    An inherited method, which was not abstract on the super-class, can be declared abstract in a sub-class (thereby making the sub-class abstract). There is no restriction. In the same token, a subclass can be declared abstract regardless of whether the super-class was abstract or not.
·    Private members are not inherited, but they do exist in the sub-classes. Since the private methods are not inherited, they cannot be overridden. A method in a subclass with the same signature as a private method in the super-class is essentially a new method, independent from super-class, since the private method in the super-class is not visible in the sub-class.

public class PrivateTest {
    public static void main(String s[]){
        new PTSuper().hi();     // Prints always Super
        new PTSub().hi();     // Prints Super when subclass doesn't have hi method
                 // Prints Sub when subclass has hi method
        PTSuper sup;
        sup = new PTSub();
        sup.hi();     // Prints Super when subclass doesn't have hi method
            // Prints Sub when subclass has hi method
    }
}

class PTSuper {
    public void hi() { // Super-class implementation always calls superclass hello
        hello();
    }
    private void hello() {     // This method is not inherited by subclasses, but exists in them.
            // Commenting out both the methods in the subclass show this.
            // The test will then print "hello-Super" for all three calls
            // i.e. Always the super-class implementations are called
        System.out.println("hello-Super");
    }
}

class PTSub extends PTSuper {
    public void hi() { // This method overrides super-class hi, calls subclass hello
        try {
            hello(); 
        }
        catch(Exception e) {}

    }

    void hello() throws Exception {     // This method is independent from super-class hello
                // Evident from, it's allowed to throw Exception
        System.out.println("hello-Sub");
    }
}

·    Private methods are not overridden, so calls to private methods are resolved at compile time and not subject to dynamic method lookup. See the following example.

public class Poly {
    public static void main(String args[]) {
        PolyA ref1 = new PolyC();
        PolyB ref2 = (PolyB)ref1;

        System.out.println(ref2.g());     // This prints 1
                    // If f() is not private in PolyB, then prints 2
    }
}

class PolyA {
    private int f() { return 0; }
    public int g() { return 3; }
}

class PolyB extends PolyA {
    private int f() { return 1; }
    public int g() { return f(); }
}

class PolyC extends PolyB {
    public int f() { return 2; }
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一级二级三级在线免费观看| 日韩欧美亚洲国产另类| 中文字幕视频一区二区三区久| 国产福利一区在线| 国产精品视频一区二区三区不卡| 岛国精品一区二区| 亚洲人成在线播放网站岛国| 欧美色涩在线第一页| 奇米777欧美一区二区| 欧美本精品男人aⅴ天堂| 国产精品1区二区.| 中文字幕佐山爱一区二区免费| 日本道色综合久久| 日韩av中文字幕一区二区三区| 欧美白人最猛性xxxxx69交| 国产精品综合av一区二区国产馆| 国产精品久久久久久亚洲毛片| 在线观看三级视频欧美| 日本不卡一区二区| 国产精品无人区| 欧美亚洲一区二区在线观看| 蜜桃av一区二区在线观看| 欧美高清在线精品一区| 在线免费精品视频| 美女精品自拍一二三四| 亚洲欧洲精品一区二区三区 | 午夜亚洲福利老司机| 欧美丰满少妇xxxxx高潮对白| 久久精品国产99| 日韩毛片视频在线看| 91精品综合久久久久久| va亚洲va日韩不卡在线观看| 亚洲成人免费观看| 中文子幕无线码一区tr| 欧美精品丝袜久久久中文字幕| 国产盗摄一区二区三区| 日韩av中文在线观看| 国产精品传媒视频| 欧美成人伊人久久综合网| 91香蕉视频在线| 激情欧美一区二区三区在线观看| 日韩美女视频一区| 久久午夜免费电影| 欧美日韩亚洲综合在线 | 国产在线精品一区二区| 亚洲一区二区精品视频| 欧美韩国日本不卡| 日韩免费福利电影在线观看| 色哟哟亚洲精品| 国产精品一二三| 日韩高清一区在线| 夜夜嗨av一区二区三区网页| 亚洲欧洲综合另类| 久久伊人蜜桃av一区二区| 欧美日韩一区二区三区在线看| 成人av电影在线| 国产一区二区三区久久悠悠色av| 日本午夜精品视频在线观看| 亚洲sss视频在线视频| 亚洲欧美日韩综合aⅴ视频| 国产精品网站在线观看| 国产日韩精品一区二区浪潮av | 亚洲精品国产精品乱码不99 | 亚洲人成人一区二区在线观看| 久久综合久久鬼色中文字| 欧美一级一区二区| 欧美日韩精品免费观看视频| 欧美在线999| 色婷婷综合久久久| 97久久超碰精品国产| 丁香激情综合五月| 国产91在线观看| 国产福利一区二区| 国产成人精品一区二区三区四区| 久久不见久久见免费视频7| 热久久久久久久| 蜜桃av一区二区在线观看| 男人的天堂久久精品| 蜜臀va亚洲va欧美va天堂| 麻豆精品在线播放| 国产在线国偷精品免费看| 国产一区999| 国产精品18久久久久久久久| 国产高清精品在线| 97国产一区二区| 色综合久久中文字幕综合网| 欧美午夜电影一区| 欧美三级在线播放| 欧美一区二区三区公司| 日韩视频免费观看高清完整版| 欧美成人猛片aaaaaaa| 亚洲精品一区二区三区香蕉| 久久精品一二三| 国产精品不卡在线| 亚洲午夜激情av| 久久精品国产99国产精品| 国产一区二区主播在线| 国产成人在线视频网站| 91麻豆123| 久久久99精品免费观看| 久久精品亚洲国产奇米99| 日本一区二区三区电影| 亚洲人精品一区| 日本欧美肥老太交大片| 看片网站欧美日韩| 成人一区二区三区视频在线观看| 91丨国产丨九色丨pron| 欧美日韩精品一区二区三区蜜桃| 91麻豆精品国产| 中文字幕成人网| 亚洲综合丁香婷婷六月香| 人禽交欧美网站| 成人综合在线观看| 欧美日韩一区久久| 久久精品夜色噜噜亚洲a∨| 1024亚洲合集| 日本午夜精品视频在线观看 | 一区二区三区精品视频| 日本女人一区二区三区| 国产传媒欧美日韩成人| 欧美色图免费看| 国产性天天综合网| 亚洲国产日韩一级| 国产精品一区在线观看乱码| 91福利视频久久久久| 26uuu精品一区二区在线观看| 亚洲色图视频免费播放| 美女脱光内衣内裤视频久久网站| 成人性生交大片免费看视频在线| 欧美巨大另类极品videosbest | 日韩一区在线看| 久久精品久久久精品美女| 91亚洲精品一区二区乱码| 欧美成人aa大片| 一区二区三区在线看| 国产毛片精品视频| 欧美精三区欧美精三区| 国产精品久久久久久久久免费樱桃 | 午夜a成v人精品| 成人高清视频在线| 精品久久99ma| 亚洲一区二区精品久久av| 国产99久久久国产精品免费看| 日韩一区二区三区四区| 亚洲精品免费播放| jiyouzz国产精品久久| 久久久影院官网| 精品一区二区影视| 欧美精品v国产精品v日韩精品 | 91麻豆精品国产91久久久更新时间| 日韩理论在线观看| 不卡视频一二三| 国产嫩草影院久久久久| 麻豆91在线观看| 日韩欧美国产小视频| 日韩福利视频导航| 欧美视频在线观看一区| 亚洲精品你懂的| 在线免费av一区| 亚洲精品免费在线| 一本到不卡精品视频在线观看| 国产精品成人免费在线| 91亚洲大成网污www| 亚洲欧美日韩中文播放| 一本一本大道香蕉久在线精品 | 久久久久久日产精品| 国产在线视视频有精品| 中文字幕精品一区二区精品绿巨人 | 另类调教123区| 精品国产乱码久久久久久图片| 婷婷丁香激情综合| 91精品综合久久久久久| 日本成人在线网站| 精品捆绑美女sm三区| 激情综合网av| 国产午夜精品福利| av网站一区二区三区| 亚洲视频免费观看| 色婷婷精品大视频在线蜜桃视频| 一区二区激情小说| 欧美区视频在线观看| 日韩av中文字幕一区二区三区| 精品久久久久久无| 春色校园综合激情亚洲| 亚洲精品v日韩精品| 7777精品伊人久久久大香线蕉最新版| 日本欧美一区二区| 国产亚洲自拍一区| 色香蕉久久蜜桃| 日韩在线观看一区二区| 亚洲精品一区二区精华| 成人免费视频app| 亚洲国产精品久久人人爱| 欧美va亚洲va香蕉在线| 成人免费毛片app| 亚洲成av人片| 久久青草欧美一区二区三区| 色视频成人在线观看免| 日韩专区欧美专区| 欧美韩国日本一区|