Java面向对象编程篇2——面向对象三大特点
Java面向對象編程篇2——面向對象三大特點
1、封裝
1.1、封裝的概念
通常情況下可以在測試類給成員變量賦值一些合法但不合理的數值,無 論是編譯階段還是運行階段都不會報錯或者給出提示,此時與現實生活不符
為了避免上述錯誤的發生,就需要對成員變量進行密封包裝處理,來隱 藏成員變量的細節以及保證成員變量數值的合理性,該機制就叫做封裝
1.2、封裝實現流程
-
私有化成員變量,使用private關鍵字修飾
-
提供公有的get和set方法,并在方法體中進行合理值的判斷
-
在構造方法中調用set方法進行合理值的判斷
2、繼承
2.1、繼承的概念
- 當多個類之間有相同的特征和行為時,可以將相同的內容提取出來組成 一個公共類,讓多個類吸收公共類中已有特征和行為而在多個類型只需 要編寫自己獨有特征和行為的機制,叫做繼承。
- 在Java語言中使用extends(擴展)關鍵字來表示繼承關系。
- 使用繼承提高了代碼的復用性,可維護性及擴展性,是多態的前提條件。
2.2、繼承的特點
- 子類不能繼承父類的構造方法和私有方法,但私有成員變量可以被繼承 只是不能直接訪問
- 無論使用何種方式構造子類的對象時都會自動調用父類的無參構造方法, 來初始化從父類中繼承的成員變量,相當于在構造方法的第一行增加代 碼super()的效果
- 使用繼承必須滿足邏輯關系:子類 is a 父類,也就是不能濫用繼承
- Java語言中只支持單繼承不支持多繼承,也就是說一個子類只能有一個父 類,但一個父類可以有多個子類
3、多態
3.1、多態的概念
- 多態主要指同一種事物表現出來的多種形態
- 飲料:可樂、雪碧、紅牛、脈動
- 寵物:貓、狗、鳥、小強、魚
- 人:學生、教師、工人、保安
- 圖形:矩形、圓形、梯形、三角形
3.2、多態的格式
父類類型 引用變量名 = new 子類類型();3.3、多態的特點
- 當父類類型的引用指向子類類型的對象時,父類類型的引用可以直接調 用父類獨有的方法
- 當父類類型的引用指向子類類型的對象時,父類類型的引用不可以直接 調用子類獨有的方法
- 對于父子類都有的非靜態方法來說,編譯階段調用父類版本,運行階段 調用子類重寫的版本(動態綁定)
- 對于父子類都有的靜態方法來說,編譯和運行階段都調用父類版本
3.4、多態的意義
多態的實際意義在于屏蔽不同子類的差異性實現通用的編程帶來不同的效果
4、構造方法
.構造方法名與類名完全相同并且沒有返回值類型
4.1、構造方法作用
使用new關鍵字創建對象時會自動調用構造方法實現成員變量初始化工作
4.2、構造方法格式
class 類名 {類名(形參列表) {構造方法體;} }4.3、構造方法注意事項
- 當一個類中沒有定義任何構造方法時,編譯器會自動添加一個無參空構 造構造方法,叫做默認/缺省構造方法,如:Person(){}
- 若類中出現了構造方法,則編譯器不再提供任何形式的構造方法。
5、方法重載與方法覆蓋重寫
5.1、方法重載
與參數列表的數量、類型和順序有關,與修飾符和返回值類型以及拋出異常類型無關
在一個類中為一種行為提供多種實現方式并提高可讀性
public class Test3 {public int add(int a,int b){return a+b;}public int add(int a,int b,int c){return a+b+c;} }5.2、方法覆蓋重寫
父類方法無法滿足子類的要求,子類通過方法重寫滿足需求
public class Test4 {public int add(int a,int b){return a+b;} } class Test5 extends Test4 {@Overridepublic int add(int a, int b) {return a-b;} }6、方法遞歸
6.1、遞歸的概念
方法自己調用自已
6.2、遞歸三要素
- 一定有一種可以退出程序的情況;
- 總是在嘗試將一個問題化簡到更小的規模
- 父問題與子問題不能有重疊的部分
6.3、遞歸范例
public class Test6 {public static void main(String[] args) {System.out.println(add(100));}public static int add(int a){if (a!=1){return a+add(a-1);}else{return 1;}} }7、訪問權限
| public | 是 | 是 | 是 | 是 |
| protected | 是 | 是 | 是 | 否 |
| default | 是 | 是 | 否 | 否 |
| private | 是 | 否 | 否 | 否 |
- public: 所修飾的類、變量、方法,在內外包均具有訪問權限;
- protected: 這種權限是為繼承而設計的,protected所修飾的成員,對所有子類是可訪問的,但只對同包的類是可訪問的,對外包的非子類是不可以訪問
- 包訪問權限(default): 只對同包的類具有訪問的權限,外包的所有類都不能訪問;
- private: 私有的權限,只對本類的方法可以使用;
8、static關鍵字
static是不允許用來修飾局部變量
8.1、static方法
static方法一般稱作靜態方法,由于靜態方法不依賴于任何對象就可以進行訪問,因此對于靜態方法來說,是沒有this的,因為它不依附于任何對象,并且由于這個特性,在靜態方法中不能訪問類的非靜態成員變量和非靜態成員方法,因為非靜態成員方法/變量都是必須依賴具體的對象才能夠被調用。
public class Test7 {public static void main(String[] args) {Test8.sleep();} } class Test8{public static void sleep(){System.out.println("sleep~");} }8.2、sattic變量
static變量也稱作靜態變量,靜態變量和非靜態變量的區別是:靜態變量被所有的對象所共享,在內存中只有一個副本,它當且僅當在類初次加載時會被初始化。而非靜態變量是對象所擁有的,在創建對象的時候被初始化,存在多個副本,各個對象擁有的副本互不影響。
static成員變量的初始化順序按照定義的順序進行初始化
8.3、static代碼塊
static關鍵字還有一個比較關鍵的作用就是 用來形成靜態代碼塊以優化程序性能。static塊可以置于類中的任何地方,類中可以有多個static塊。在類初次被加載的時候,會按照static塊的順序來執行每個static塊,并且只會執行一次。
private static Date startDate,endDate; static{startDate = Date.valueOf("2000");endDate = Date.valueOf("2021"); }9、final關鍵字
9.1、修飾類
當用final修飾一個類時,表明這個類不能被繼承。
9.2、修飾方法
類的private方法會隱式地被指定為final方法
方法無法被覆蓋重寫
9.3、修飾變量
對于一個final變量,如果是基本數據類型的變量,則其數值一旦在初始化之后便不能更改;如果是引用類型的變量,則在對其初始化之后便不能再讓其指向另一個對象,但其屬性仍可以更改。
9.4、final注意事項
- 當用final作用于類的成員變量時,成員變量(注意是類的成員變量,局部變量只需要保證在使用之前被初始化賦值即可)必須在定義時或者構造器中進行初始化賦值,而且final變量一旦被初始化賦值之后,就不能再被賦值了。
- static作用于成員變量用來表示只保存一份副本,而final的作用是用來保證變量不可變。
總結
以上是生活随笔為你收集整理的Java面向对象编程篇2——面向对象三大特点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sde oracle11g,Arcsde
- 下一篇: cos7安装mysql_centos7