面向對象三大特性
面向對象三大特性:封裝、繼承、多態
封裝
封裝:將類的某些信息隱藏在類內部,不允許外部程序直接訪問,而是通過該類提供的方法來實現對隱藏信息的操作和訪問
封裝的好處
- 隱藏類的實現細節;
- 只能通過規定方法訪問數據;
- 方便加入控制語句;
- 方便修改實現;
封裝的步驟
- 修改屬性可見性 – 設爲private
public class pet {
// 創建屬性並修改可見性
private String name;
private int age;
}
- 創建get/set方法 – 用於屬性讀寫
// 創建get方法
public String getName() {
return name;
}
// 創建set方法
public void setName(String name) {
this.name = name;
}
- 在get/set方法中加入控制語句 – 對屬性進行合法判斷
public void setAge(int age) {
// 加入控制語句
if(age > 0 && age < 100){
this.age = age;
}
}
繼承(is-a)
繼承:使用繼承可以優化代碼,將重複代碼抽取到父類當中,減少代碼量,方便修改代碼
使用繼承
- 編寫父類
class pet {
//公共屬性和方法
}
- 編寫子類,繼承父類
class dog extends pet {
//子類特有的屬性和方法
}
class cat extends pet {
//子類特有的屬性和方法
}
繼承的特性
-
單根性
只能繼承一個類,不能多重繼承 -
傳遞性
從父類繼承來的元素,可以被子類繼承
子類訪問父類成員
使用super關鍵字
- 訪問父類構造方法
//構造器
public dog() {
// 訪問父類構造方法
// super();
super("二哈",2);
}
- 訪問父類構造屬性
super.name;
- 訪問父類方法
super.print();
不可被繼承的資源
- 不可繼承被私有化的屬性和方法
- 構造方法
多態
多態:指一個行爲,擁有多種不同表現形式。 例:小明擁有人類形態同時擁有學生形態
優點: 可擴展性強
使用多態實現思路
- 編寫父類
class Pet {
//喫東西
public void eat(){
}
}
- 編寫子類,子類重寫父類方法
class Dog extends Pet {
//重寫父類方法
public void eat(){
System.out.println("喫骨頭");
}
}
- 運行時,使用父類類型,子類對象
class cat extends Pet {
//向上自然轉型
Pet pet = new Dog();
}
何時使用多態
1.當父類爲方法參數
2.當父類作爲方法返回值
只能調用父類有的方法
例:
創建父類並添加方法
public class Father {
public void eat(){
}
}
創建子類重寫父類方法並添加獨有方法
public class Son extends Father{
public void eat(){
System.out.println("喫飯");
}
public void play(){
System.out.println("玩");
}
}
使用多態調用方法
public class Main {
public static void main(String[] args) {
Father father = new Son();
father.eat();
//報錯
father.play();
}
}
編譯看左邊,運行看右邊