1、繼承 ->is a(你是人,蘋果是水果,)
1)語法
public? class? <子類>? extends? <父類>{
}
2)子類使用父類的方法
3)子類覆蓋父類的方法
父類只定義共性的行為(做什么),如何做(如何吃飯),下沉到子類完成
4)protected? 保護(hù)
介于public 和 private之間
主要用于繼承
訪問修飾符? ? ? ? ? 本類? ? 同一包? ? ? 子類? ? ? 外部
private? ? ? ? ? ? ? ? ? Y? ? ? ? ? N? ? ? ? ? ? N? ? ? ? ? ? N
friendly(默認(rèn))? ? ? ? Y? ? ? ? ? Y? ? ? ? ? ? N? ? ? ? ? ? ?N
protected? ? ? ? ? ? ? Y? ? ? ? ? ?Y? ? ? ? ? ?Y? ? ? ? ? ? ?N
public? ? ? ? ? ? ? ? ? ? Y? ? ? ? ? Y? ? ? ? ? ? Y? ? ? ? ? ? ?Y
public? 可以修飾屬性、方法、類
private 可以修飾屬性、方法?
protected 可以修飾屬性、方法?
friendly(默認(rèn))? 可以修飾? 屬性、方法、類

向上轉(zhuǎn)型 upcasting
First:返回類型的向上轉(zhuǎn)型
int num =10;
long result = num;
父類的引用指向子類的對(duì)象,叫做向上轉(zhuǎn)型。
tom是對(duì)象的一個(gè)引用,可以看做Student類型,也可以看做Person類型
Person tom = new Student();
Second:參數(shù)的向上轉(zhuǎn)型
main(String args[]){
int num1 = 10;
int num2 = 20;
add(num1,num2);
}
public? static void add(long first,long second){
System.out.println(first+second);
}
向上轉(zhuǎn)型有一個(gè)支撐點(diǎn):繼承
好處:工作中去掉很多重復(fù)的代碼
只針對(duì)父類的編程
注意:java只支持單繼承(子類最多只能有一個(gè)父類)
工作中什么情況下使用繼承?
只有需要向上轉(zhuǎn)型的時(shí)候用繼承
2、多態(tài) has a
什么是多態(tài)?
? 程序在運(yùn)行期判斷對(duì)象類型,調(diào)用恰當(dāng)方法(只有在運(yùn)行期才知道創(chuàng)建哪個(gè)類型的對(duì)象)
? 特征:1做什么和怎么做分離
? 在父類定義做什么,怎么做下沉到子類
? 父類只定義共性的行為
? 2讓不變的事物和變動(dòng)的事務(wù)隔離
? ? 不變的事物:所有的形狀都可以繪畫
? ? 變化的事物:每一種形狀化的方式不一樣
? ? 不變的事物抽象為父類,變化的事物下沉到子
????在父類定義的方法,子類重新定義
????多態(tài):運(yùn)行時(shí)判斷對(duì)象類型,調(diào)用恰當(dāng)?shù)姆椒?/p>
????特征:父類定義做什么,如何做下沉到子類
? ? 針對(duì)父類的編程,忽略子類的存在
????每個(gè)子類實(shí)現(xiàn)的方式不同(圓形和三角形畫的方式不一樣)
????對(duì)象有兩種狀態(tài),1編譯期狀態(tài)(父類)
2 運(yùn)行期狀態(tài)(子類)
????Java支持向上轉(zhuǎn)型,對(duì)象的狀態(tài)在運(yùn)行期會(huì)進(jìn)行識(shí)別
????支撐點(diǎn):方法覆蓋? & 向上轉(zhuǎn)型?

3、封裝?
在面向?qū)ο蟪淌皆O(shè)計(jì)方法中,封裝(英語:Encapsulation)是指,一種將抽象性函式接口的實(shí)作細(xì)節(jié)部份包裝、隱藏起來的方法。?
封裝可以被認(rèn)為是一個(gè)保護(hù)屏障,防止該類的代碼和數(shù)據(jù)被外部類定義的代碼隨機(jī)訪問。?
要訪問該類的代碼和數(shù)據(jù),必須通過嚴(yán)格的接口控制。?
封裝最主要的功能在于我們能修改自己的實(shí)現(xiàn)代碼,而不用修改那些調(diào)用我們代碼的程序片段。?
適當(dāng)?shù)姆庋b可以讓程式碼更容易理解與維護(hù),也加強(qiáng)了程式碼的安全性。?
public class Student {
/**
* 學(xué)生的名稱
*/
String stuName;
Student(){
stuName="Tom";
}
/**
* 學(xué)生具有學(xué)習(xí)行為
*/
public void study(){
System.out.println(stuName+"正在學(xué)習(xí)");
}
}
public class TestStudent {
public static void main(String[] args) {
Student tom = new Student();
tom.study();
}
}