繼承中成員方法的訪問
子類繼承父類,如果子類的成員方法名和父類的成員方法名不一致的情況:分別呼叫即可!
如果子類的成員方法名稱和父類的成員方法名稱一致的情況:
1)先在子類找,如果存在方法名,就使用
2)如果子類中不存在,就在父類中找,存在就使用
3)父類中都沒有,就編譯報錯了!
方法重寫
方法重寫:
子類出現了和父類一模一樣的方法宣告
修飾符 返回值 方法名都一樣(一模一樣)
注意事項:
子類重寫父類的方法的時候,訪問許可權不能更低!,最好帶上許可權修飾符 跟父類一樣都是public
要麼子類重寫父類的方法的時候,訪問許可權比父類大即可!(或者和父類一模一樣)
//定義乙個手機類
class
phone
}//新的手機類 繼承自 phone類
class
newphone
extends
phone
}//測試類
class
extendsdemo2
}
繼承的使用//動物類
class
animal
private string name;
private
int age;
private string color;
public
void
setname
(string name)
public string getname()
public
void
setage
(int age)
public
intgetage()
public
void
setcolor
(string color)
public string getcolor()
public
void
eat(
)public
void
sleep()
}//繼承動物的貓類
class
catextends
animal
public
void
eat(
)public
void
sleep()
public
void
game()
}//繼承動物的狗類
class
dogextends
animal
public
void
eat(
)public
void
sleep()
public
void
game()
}class
ce}
兩個面試題
1)overload和override的區別?
方法過載和方法重寫
方法過載:定義方法的時候,如果方法名一樣,引數列表不同,與返回值無關
引數列表不同:
1)引數個數不同
2)引數型別不同
構造方法可以方法過載
方法重寫(重點):繼承關係中,子類出現了和父類一模一樣的方法宣告,將父類覆蓋(複寫),建立子類物件,呼叫該方法,執行子類的功能!
底層原碼很多技術都使用到了方法重寫!
2)this和super的區別?
this:當前當前類物件的位址值引用
super:代表父類的空間標識(父類物件的位址值引用)
呼叫成員變數
this.成員變數: 訪問本類成員位置的變數
super.成員變數: 訪問父類的成員位置變數
呼叫成員方法
this.成員方法名();
supser.成員方法名() ;
呼叫構造方法
this():訪問本類無參構造方法
this(…): 訪問本類有參構造
super():訪問父類的無參構造
super(…):訪問父類的有參構造
final:不可改變。可以用於修飾類、方法和變數。
可以修飾類,該類不能被繼承
可以修飾成員變數,此時變數是乙個常量,不能被賦值
可以修飾成員方法,該方法不能被重寫
子類重寫父類的靜態的方法的時候,子類的該方法必須靜態.靜態方法算不上方法重寫,但是出現的現象和方法重寫的現象一樣.(靜態在類載入前就存在先載入了)
多型:乙個事物在不同時刻的不同狀態
舉例:animal a = new cat() ;//貓是動物
cat c = new cat() ; //貓是貓
多型的前提條件:
1)必須有繼承關係 (產生乙個中extends 關係)
2)需要有方法重寫
子類繼承父類的時候,需要使用子類的功能,需要將父類的功能覆蓋掉! 舉例:貓狗案例
animal, eat()和sleep(),每個動物的吃和睡的行為不同!
3)必須有父類引用指向子類物件 (向上轉型)
fu f = new zi() ; 在記憶體中使用子類例項化(建立物件),但是子類繼承父類,通過構造方法 讓父類初始化
多型的成員訪問特點:
fu f = new zi() ;
1)成員變數(非靜態變數)
編譯看左,執行看左邊 (看父類)
2)構造方法
fu f = new zi() ; 記憶體建立的是子類物件,但是存在繼承關係,執行構造方法先讓父類初始化完畢,然後在初始化子類
3)成員方法(非靜態) (方法重寫,說的非靜態的方法!)
編譯看左,執行看右 (因為存在方法重寫,執行看的右邊)
4)靜態的成員方法:
編譯看左,執行看左(靜態方法算不上方法重寫,跟類先關,優先父類進行資料初始化,function方法先進記憶體)
父類引用.靜態方法名()–呼叫父類的方法
多型的好處:
1)提高**的維護性(繼承來保證)
2)提高**的擴充套件性(由多型保證)
多型的弊端:
父類引用指向子類物件(向上轉型),無法訪問子類的特有功能!
需要訪問子類特有功能,怎麼辦?
1)直接在測試的時候,子類去建立自己的物件
son s = new son()
可以訪問,但是從記憶體角度考慮,重新在堆記憶體中開闢空間,耗費空間的記憶體!
2)如果能夠類似於這種方式:父類引用指向子類物件,訪問的是父類,如果能夠將父類的引用轉換為子類引用
是可以的,
將父類的引用強制轉換為子類的引用 :向下轉型
zi zi = (zi)f;
//父類
class
father
}//子類
class
sonextends
father
public
void
playgame()
}//測試類
class
duotaidemo4
}
多型的應用
假如我們在開發乙個系統時需要對職員類進行設計,職員包含3個屬性:姓名、工號以及工資。以及工作的功能
員工也是職員,除了含有職員的屬性外,自己的工作為敲**
經理也是員工,除了含有職員的屬性外,另為還有乙個獎金屬性。自己的工作為定專案,特有功能為獎金
請使用繼承的思想設計出員工類和經理類。要求類中提供必要的方法進行屬性訪問。
//父類 職員類
class
zhiyuan
private string name;
//私有父類成員屬性
private
int id;
private
int gongzi;
public
void
setname
(string name)
public
void
setid
(int id)
public
void
setgongzi
(int gongzi)
public string getname()
public
intgetid()
public
intgetgongzi()
public
void
gongzuo()
}//子類 員工類
class
yuangong
extends
zhiyuan
public
void
gongzuo()
}//子類 經理類
class
jingli
extends
zhiyuan
private
int jiangjin;
//子類特有屬性私有化
public
void
setjiangjin
(int jiangjin)
public
intgetjiangjin()
public
void
gongzuo()
public
void
jiangjin()
}class
yuance
}
物件導向3
前邊八篇部落格寫了從面向過程的方法來開發一款軟體的各種方法,和過程。包括了計畫,需求分析,設計,程式功能的實現,測試,維護還有介面設計的多項。但是,隨著技術的發展,隨著it業的發展,物件導向的技術,已經發展的越來越廣泛。這篇部落格,我就給大家概要介紹一下面向技術相關技術!首先看一下要總結知識的幾大項...
物件導向3
1 json的全稱就是個 object 物件 2 物件導向的封裝函式叫做工廠方式 方便建立多個物件導向 3 物件的引用 基本型別的引用 單純只是值的複製 物件型別的引用 位址的傳遞引用 只要在程式中賦值,必然要開闢新的位址。比較 基本型別只要值相同true 物件型別 值和引用都相同 var arr1...
物件導向3
抽象類 抽象類是對一類事物特徵行為的抽象,可以包含抽象方法。在python3中可以使用abc模組,該模組中有乙個元類abcmeta和修飾器 abstractmethod。抽象類不能被直接例項化 多重繼承 python支援多重繼承,即1個類可以繼承多個父類。語法為 class name parent ...