java學習筆記3——重載

構造器的重載,同一個類中具有多個構造器,多個構造器的形參列表不同,被稱爲構造器重載。可以在一個構造器裏直接調用另一個構造器。
例:
public class Apple{
public String name;
public String color;
public double weight;
public Apple(){
}
public Apple(String name, String color){
this.name = name;
this.color = color;
}
public Apple(String name, String color, double weight ){
//通過this調用另一個重載的構造器的初始化代碼
this(name , color);
this.weight = weight;
}
}

       private不能被重寫,要重寫用protected
       重載( overload):主要發生在同一個類的多個同名方法之間
       重寫( override):主要發生在子類和父類的同名方法之間

       一般子類中重寫了父類方法後,則程序執行取子類中被重寫的方法,而隱藏父類方法,要想在子類中繼續使用父類方法,則可以使用super或者父類類名作爲調用者來調用父類中被覆蓋的方法。
例:
class BaseClass{
public int a = 5;
}
public class SubClass extends BaseClass{
public int a = 7;
public void accessOwner{
System.out.println(a);
}
public void accessBase{
System.out.println( super.a );
}
public static void main(String[] args){
Subclass sc = new SubClass();
//輸出7
sc.accessOwner();
//輸出5
sc.accessBase();
}
}
      當系統創建SubClass時,實際上會爲SubClass對象分配兩塊內存,一塊用於存儲在SubClass類中定義的a 成員變量,一塊用於存儲從BaseClass類中繼承得到的a 成員變量。
      當程序創建一個子類對象時,系統不僅會爲該類中定義的實例變量分配內存,也會爲它從父類繼承得到的所有實例變量分配內存,即時子類定義了與父類中同名的實例變量。也就是說,當系統創建一個java對象時,如果該java類中有兩個父類(一個直接父類A,一個間接父類B),假設A類中定義了2個實例變量,B類中定義了3個實例變量,當前類中定義了2個實例變量,那麼這個java對象將會保存2+3+2個實例變量。

class Parent{
Public String tag="我是你爹";
}
class Son extends Parent{
private String tag="滾,你是我兒子";
}
public class HideTest{
public static void main(String[] args){
Son s = new Son();
//程序不能訪問 s 的私有變量tag
//輸出“我是你爹”
System.out.println( ( (Parent)d).tag);
}
}
    將s變量強制向上轉型爲Parent類型,再通過它來訪問tag實例變量是允許的。
發佈了27 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章