子类怎么继承父类方法中的变量_JavaOOP_04 封装 继承
一、封裝
概念:隱藏程序內部的具體實現細節,對外提供接口,從而提高程序的安全性。
高內聚,低耦合。
使用封裝的步驟:
1、屬性私有化,使用private訪問修飾符進行修飾
2、對外提供 setter/getter 方法 setter設置值 getter獲取值
3、在setter語句中進行邏輯語句進行判斷
訪問修飾符的使用
public 公共的
protected 受包保護的
默認修飾符 默認訪問修飾符,不可顯示定義
private 私有的只有本類可以訪問
二、繼承
2.1 Object類:
所有類的基類。(父類)
Java是單根繼承,子類只有一個直接父類。但Java有傳承性。子類可以有多個間接父類。
2.2 使用繼承后,子類不能繼承父類的那些成員:
private私有化的
構造方法(只能調用,不可繼承)
不同包中的,默認訪問修飾符修飾的成員。(protected、public修飾的可以)
//static 靜態使用 //被包保護的靜態常量 //數據共享時 static 靜態 //當數據不經常更改時 final 常量 //當數據既是共享的也不易于更改時 static final 靜態常量 protected static final String GIRL = "雌"; protected static final String BOY = "雄";2.3 繼承的優缺點
優點: 提高代碼的復用性
提高代碼的維護性(一改即可改全部)
讓類與類之間產生了關系,是多態的前提
缺點: 類的耦合性增強
開發的原則:高內聚低耦合
耦合:類與類的關系
內聚:自己處理某件事情的能力
關鍵字 extends
目的:減少代碼量,方便后期維護修改。
符合繼承的關系: is a
使用步驟: 將多個程序類中的共同的特征抽取出來,形成一個公共的類。這個公共的類叫父類,實現繼承這個公共的父類的程序,叫做子類。
繼承的語法:
訪問修飾符 子類 extends 父類{ //成員變量 //成員方法 }子類繼承父類后構造的執行順序:先父類后子類
當子類構造沒有顯示調用父類任意構造時,系統會隱式默認調用父類無參構造方法。
當子類構造顯示調用了父類任意構造時,系統就不會隱式默認調用父類無參構造方法。
此時程序執行時,只會調用子類構造調用的對應父類構造方法,且該類調用的構造方法必須放在首行
2.4 代碼示例
讓類與類之間產生關系,子父類關系
例如 狗類貓類都屬于動物類
Animal 是父類
Dog Cat 是子類
public2.5 繼承的特點
只支持單繼承(一個兒子繼承一個父親)
不支持多繼承(有些語言支持多繼承,格式:extends 類1,類2)
Java支持多層繼承(繼承體系,兒子繼承父親,父親繼承爺爺)
如果想用這個體系的所有功能中
即DemoC多層繼承了DemoB和DemoC 用最底層的類創建對象
如果想看這個體系的共性功能
即DemoB和DemoC 都從DemoA繼承 看最頂層的類
2.6 繼承的注意事項
繼承是 is a 的關系
學生 老師 是 人
蘋果 西瓜 是 水果
狗 貓 是 動物
如果有A、B兩個類 若A是B的一種,或B是A的一種就可以考慮使用繼承。
2.7 繼承中成員變量的關系
子父類不同名變量,沒有影響
子父類同名變量(開發中不允許出現這種情況,子類繼承父類就是為了使用父類的成員,
自己再定義同名的成員變量就失去了繼承的意義),
就近原則,即子類自己有就不用父類的
2.8 this與super的區別
2.9 繼承中構造方法的關系
構造方法:進行初始化
因為子類初始化之前要先完成父類的初始化
子類中所有的構造方法都會默認訪問父類中空參數的構造方法
父類初始化完成后才輪到子類
2.10 構造方法的注意事項
this與super不能同時出現
當父類沒有無參構造方法時
使用setXxx( ) getXxx( )方法
2.11 繼承中成員方法的關系
不同名的方法名
直接使用
同名的方法名
若想使用父類的方法 使用 super. 調用
方法重寫
2.12 static關鍵字的使用
被static修飾的變量叫做靜態變量或類變量
被static修飾的方法叫做靜態方法或類方法
被static修飾的代碼塊叫做靜態代碼塊
被static修飾的成員,直接通過 類名.成員(屬性、方法);
static的使用場景:
數據共享時 static 靜態
當數據不經常更改時 final 常量
當數據既是共享的也不易于更改時 static final 靜態常量
靜態修飾的成員和非靜態修飾成員的區別:
非靜態(實例) 成員變量和成員方法 可以是靜態也可以是非靜態
注意: 實例方法和靜態方法可以直接調用static 但不可定義static 因為static稱為類變量
只能在類中定義
靜態只能訪問靜態
靜態方法不能【直接】調用非靜態(實例)成員
2.13 類變量(靜態變量)和實例變量(對象變量,成員變量)的區別?
(1)所屬不同:類變量屬于類,是對象的共性內容;實例變量屬于對象,是對象的特性內容。
(2)在內存中位置不同:類變量存在方法區的靜態區,拷貝只有一份;實例變量存在堆內存中,拷貝可以有一份或者多份。
(3)生命周期不同:類變量隨著類的加載而存在,隨著類的消失而消失;實例變量隨著對象的存在而存在,隨著對象的消失而消失。
(4)調用方式不同:類變量既能被類名點的形式調用,也能通過對象點的形式調用;而實例變量只能通過對象點的形式調用。通過實例化對象名. 實例化變量 操作。
2.14 abstract
abstract修飾的類為抽象類 不能被實例化
抽象類中可以定義0~多個抽象方法
繼承抽象類的子類,該子類必須重寫父類中的所有抽象方法,除非該子類也是一個抽象類。
抽象方法必須存在于在抽象類中
abstract修飾的方法為抽象方法 沒有方法體
抽象類的使用場景:
父類沒有必要實現方法的具體細節
父類強制要求子類必須實現的功能方法
2.15 方法重寫
可理解為子類重寫父類方法
前提:存在繼承關系
概念:不同類中,方法名相同。參數列表相同。
子類的訪問修飾符不能嚴于父類
子類的方法返回值類型和父類的返回值類型相同,或者是其子類。
簡寫:不同類,同名,同參,與方法返回值類型和返回修飾符有關。
子類重寫父類的常見方法:
toString();
equals();
2.16 方法重載
簡寫:同類,同名,不同參,與方法返回值類型和返回修飾符無關。
2.17 代碼塊的執行順序
靜態代碼塊只執行一次
構造代碼塊優先于構造方法
先有父類再有子類 即使用子類構造方法前要先進行父類構造方法
public class Text01 { public static void main(String[] args) { Zi z = new Zi(); } } class Fu { static { System.out.println("Fu靜態代碼塊"); }
{ System.out.println("Fu構造代碼塊"); } public Fu() { System.out.println("Fu構造方法"); }
}
class Zi extends Fu { static { System.out.println("Fu靜態代碼塊"); }
{ System.out.println("Zi構造代碼塊"); } public Zi() { System.out.println("Zi構造方法"); } }
總結
以上是生活随笔為你收集整理的子类怎么继承父类方法中的变量_JavaOOP_04 封装 继承的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx会将post请求转为get么_
- 下一篇: 增值电信服务费是什么意思_增值电信业务I