抽象和封裝
1.從現實抽象出類的步驟
第一:找出分類(分析出類)
第二:找出類的特征(分析類的相關屬性)
第三:找出類的行為(分析類的方法)
2.常量(經常出現的變量值)
語法:piblic static final 變量名 = 變量值;
註意:變量名的所有字母都大寫,多個單詞都用下劃線(_)分隔。
例:public static final SEX_MALE ="Q仔";
常量的訪問方式:類名.常量名;
3.構造方法(特殊方法,用來創建對象)
3.1語法:public 類名(參數列表){
//方法體;
}
3.2使用
類名 對象 = new 構造方法名(參數);
例:Dog d = new Dog();
3.3構造方法的使用
a.創建對象
b.初始化值(屬性值)
3.4構造方法和普通方法的區別
a.構造方法沒有返回值類型(return...)
b.構造方法的方法名是類名,普通方法可以任意取
c.構造方法調用:new 構造方法名(參數);
普通方法的調用: 對象名.方法名(參數);
註意:當你沒有寫構造函數時,java會提供默認的無參構造函數
例:Public Dog(){
}
4.方法重載
4.1方法重載:方法名一樣,參數列表不一樣
註意:重載與返回值類型和訪問修飾符無關
5.static和final
static:靜態的
用static 修飾的屬性,直接可以類名.方法名訪問
final:最終的
用final修飾的屬性,它的值初始化後,不能再改變
static.非private修飾 非static private修飾
屬性
註意:static 不能在方法中修飾局部變量
補充:後++,先把本身的值作為表達式的值,然後本身+1
例:i++;
前++,先本身+1,然後再把值作為表達式的值
例:++i;
6.封裝
6.1封裝:隱藏類內部實現細節
6.2步驟:
第一步:將屬性私有化。
第二步:提供getter/setter方法(getXxxx(),setXxxx()),
第三步:在getter/setter中加入控制語句
6.3this關鍵詞
this:表示當前對象
調用屬性:this.屬性名
調用方法:this.方法名();
this();表示調用構造函數
註意:this(),必須寫在構造函數的第一行
7.繼承(extends)
7.1繼承:遺傳
7.2語法
public class 子類 extends 父類{
}
例:public class Dog extends Pet{
}
7.3繼承的特點
a.子類可以繼承父類的非私有的屬性和方法
b.不能繼承構造方法
c.繼承默認權限修飾符的方法和屬性,子類和父類必須在同一個包中
7.4 super(父類)
super.屬性名 表示訪問父類的屬性
super.方法名(參數); 表示訪問父類的方法
super(參數) 表示訪問父類的構造函數
註意:super()訪問父類構造函數時,必須寫在第一行
8.抽象類(abstract)
8.1 抽象類
語法:public abstract class 類名{};
8.2抽象方法
語法:public abstract 返回值類型 方法名(參數列表);
例:public abstract void print();
註意:抽象方法有abstract修飾,並且抽象方法沒有方法體
8.3抽象類和抽象方法的特點
a.都用abstract修飾
b.抽象方法沒有方法體
c.抽象類不能實例化
並且繼承抽象類的子類都必須重寫抽象類中的所有抽象方法
註意:1.抽象類中不一定有抽象方法
2.含有抽象方法的類,一定是抽象類(接口)
9.重寫
9.1重寫就是子類重寫定義父類的方法
9.2.重寫規則
a.方法名和參數列表相同
b.修飾符訪問權限子類和父類相同或者比父類大
c.返回值類型子類和父類相同(或者是父類的返回值的子類)
d.異常跟父類相同或者範圍更小
一般:重寫時,子類的東西都要與父類保持一致
10.final
final修飾的類不能被繼承
final修飾的方法不能重寫
final修飾
//自動類型轉換
char c= 10;
int a = c;
//強制類型轉換
int a = 10;
char c = (char)a;
//向上轉型
Dog d = new Dog( );
Pet p = d;
//向下轉型
Pet p = new Dog();
Dog d = (Dog) p ;
抽象和封裝