Java-物件導向(基礎知識)

來源:互聯網
上載者:User

標籤:super   nbsp   jar   package   mat   抽象方法   介面   math   珠穆朗瑪峰   

面向過程的設計思想物件導向的設計思想對象和類的關係java類的定義建構函式(構造方法)對象的建立和使用this 關鍵字static 關鍵字package 和 import 關鍵字許可權修飾符(存取控制)類的繼承方法的重寫final 關鍵字對象轉型多態抽象類別介面- - -- -  - - - - - - - - - - -  - --  -- -  --  - --   --  --  - --   -- - --    --物件導向:    1, 面向過程的思想        準備去一個地方:            先買車, 掛牌, 開導航, 踩油門, 過黃河, 穿越珠穆朗瑪峰...    2, 物件導向的思想        我開著車去, 車怎麼去隨便        所有去這個地方的資訊, 全部封裝在這個車裡面, 我不瞭解這個車是怎麼啟動並執行, 我也不需要瞭解, 我只知道我能到達這個地方就行了        物件導向的基本思想是, 從現實世界中客觀存在的事物出發, 來構造軟體系統, 並在系統的構造中儘可能的運用人類的自然思維方式, 物件導向是目前人與電腦溝通最簡單的語言思想        合適的方法出現在合適的類裡面    3, 什麼是類, 什麼是對象?        對象是類的一種執行個體化, 對象用"屬性"和"方法"來對應描述事物所具有的"靜態屬性"和"動態屬性"        類是用於描述同一類形的對象的一個抽象的概念, 類中定義了這一類對象應該具有的"靜態屬性"和"動態屬性"                類可以看成是一類對象的模板, 對象可以看成該類的一個具體執行個體.舉個栗子(什麼是瓶子-->一類事物的抽象-->靜態屬性,動態屬性)什麼是類?    學生是類, 瓶子是類, 老師是類舉個栗子(人-->學生-->張三)什麼是對象?  這個學生是對象, 這個瓶子是對象, 這個老師是對象, 符合這類事物的特徵的某一個東西, 叫對象                領導-->顯示職工的姓名        職工:合適的方法出現在合適的類裡(有圖有真相)            靜態屬性:                姓名: 張三                年齡: 24                工資: 3000            動態屬性:                顯示姓名                顯示年齡                修改姓名                領取工資

4, 類與類之間的關係

  1.關聯關係(最弱的一種關係)(有圖有真相):

不好下一個定義, (A類中某個方法的參數是B類的某一個對象)

舉個栗子(學生<--學校-->老師)

老師要講課, 這是一個方法, 要傳個參數進去, 參數是學生對象

  2.繼承關係(避免多重繼承)(有圖有真相) extends

什麼是一種什麼

舉個栗子(運動員-->球類運動員-->籃球運動員)

  3.彙總關係(聚集, 組合)(有圖有真相)

什麼是什麼的一部分

舉個栗子(球隊-->(王隊長, 隊員))

組合----人: 頭, 身體

 

聚集:構成這個類的這部分可以是這個類的, 也可以是另外一個類的,

組合:每一部分只屬於一個類

  4.實現關係(有圖有真相) implements

介面:只管定義方法, 怎麼實現由子類去做

舉個栗子(介面(開車的方法), A類可以實現, B類也可以實現)

5, java類的定義, 對象和引用        定義一個類:            public class 類名{                成員變數                成員方法            }引用這個類:        //在main中的執行個體化(引用)類名 變數名 = new 類名();          變數名.成員變數/成員方法//可以 點 出裡面的成員變數和成員方法        java: 萬物皆對象, 處處皆需求對象是對屬性(成員變數, 靜態屬性)和方法(函數, 動態屬性)的封裝包括:java中提供的類(math/random), 程式員自己定義的類        為什麼要使用物件導向的思想:            物件導向更容易達到一種境界:                Reusable(重用性), Extensibility(可擴充性) //本意是繼承和擴充的意思,有些地方是派生的含義            面向組件(Component)--比對象更高層次的抽象                WebService            6,    成員變數的初始化(有圖有真相)            整數型--0            浮點型--0.0F/D            boolean--false            char--‘/u0000‘            String--null        成員變數可以是java中任意一種資料類型(基礎資料類型和參考型別)            什麼是參考型別 ? 就是那些類,作為類的,也就是指那些對象,還包括數組(都是對象), 介面            成員變數可以是介面(介面是參考型別,當它未指向任何一個引用的子類時),初始化值為                null            null--是對象,表示什麼都不指向.        成員變數可以初始化, 也可以不初始化(java預設初始化)成員變數和局部變數的區別:         成員變數的作用範圍-->整個類         類和對象的關係            C c1 = new C();   // C是類, c1 c2是對象, C();是方法.            C c2 = new C(); // c1, c2在這裡是局部變數

 

7, 建構函式(構造方法)

在使用 new 來建立一個對象的時候就是調用的這個類的一個構造方法(建構函式),

構造方法名與類名同名, 並且沒有傳回值(沒有傳回值也不要寫void)

 

區分空參的建構函式和有參數的建構函式

//如果什麼也不寫,程式預設是有一個空參的構造方法的.

//如果寫了一個有參數的構造方法,就會自動覆蓋空參的構造方法,所以也要再寫一個空參的構造方法

 

注釋, 命名規則!!!!!!!!!!

//變數名如果定義的很隨意,代碼量很多就會忘記寫的是什麼了.所以要寫好名

//   不要這樣  String aa = "";

 

繼承中的建構函式:

--子類的構造方法必須調用父類的構造方法(不管調用哪一個)

--super(), 調用父類的構造方法, this()表示當前對象的引用,調用本類中另外的構造方法

 

8, 關鍵字this, static, package和import語句

this:(this表示當前對象的引用)

--在類的方法定義中使用this關鍵字代表使用該方法的對象的引用

//即,在同一個類中,用this.可以調用另一個方法

--當必須指出當前使用方法的對象是誰時要使用this

--有時this可以處理方法中成員變數和參數重名的情況

 

--this可以看作是一個變數, 它的值是當前對象的引用

static(不在堆裡面也不在棧裡面, 在資料區(data seg)):

--類名直接 . 出來的變數是靜態變數, 每個類裡面的靜態變數只有一份,

是公用的(賦值後每個執行個體化的類都可使用)

--靜態方法中不可訪問非靜態成員

--靜態變數和靜態方法不需要執行個體化

--計數

--單例模式

package:

--便於管理大型軟體系統中數目眾多的類, 解決類名重名的現象

--產生.jar檔案 jar -cvf test.jar 路徑/*.*(或者使用eclipse中的Export選項)

 

9, 存取控制, 許可權修飾符( private (什麼也不寫) protected public)(有圖有真相)        puclic class 類名 {            private 類型 屬性1;            private 類型 屬性2;            set, get方法(eg.public String getName() {        return name;        }        public void setName(String name) {        this.name = name;        }   )        }

10, 物件導向的三大特性: 封裝, 繼承, 多態

封裝(...)

封裝性就是把類(對象)的屬性和行為結合成一個獨立的相同單位,並儘可能隱蔽類(對象)的內部細節,對外形成一個邊界,只保留有限的對外介面使之與外部發生聯絡。封裝的特性使得類(對象)以外的部分不能隨意存取類(對象)的內部資料(屬性),保證了程式和資料不受外部幹擾且不被誤用。

 

繼承:

子類擁有父類的屬性和方法(構造方法除外)

 

是實現代碼複用的重要手段。Java的繼承具有單繼承的特點,即只能繼承自一個父類,每個子類只有一個直接父類,但是其父類又可以繼承於另一個類,從而實現了子類可以間接繼承多個父類,但其本質上劃分仍然是一個父類和子類的關係。

 

多態((執行期間)動態綁定, 或者叫池綁定)(有圖有真相):

多態的定義:指允許不同類的對象對同一訊息做出響應。即同一訊息可以根據發送對象的不同而採用多種不同的行為方式。(發送訊息就是函數調用)

//也就是可以調用父類的同一個方法可以實現不同的結果

 

實現多態的技術稱為:動態綁定(dynamic binding),是指在執行期間判斷所引用對象的實際類型,根據其實際的類型調用其相應的方法。

多態的作用:消除類型之間的耦合關係。

 

重載(overload):

//是發生在同一個類裡面的,對同一個方法進行不同的體現的關係

方法名相同, 只有參數類型不同或參數個數不同.傳回值不同是不能構成重載的

重寫(overwrite / override):

將父類的方法重新定義

--在子類中可以根據需要,從父類中繼承來的方法進行重寫

--重寫方法必須和被重寫的方法具有相同的方法名, 參數列表和傳回型別

--重寫方法不能使用比被重寫方法更嚴格的存取權限

toString方法的重寫 alt+shif+s (選toString()這個)

equals方法的重寫    (選 hashcode() and equals這個)

11,super, final關鍵字

super: 指向父類的引用

 final的變數值不能改變

 final的方法不能被重寫

 final的類不能被繼承

 

12, 對象轉型(casting)

--父類的引用可以指向其子類的對象(使得代碼的統一性提高, 便於擴充)

--父類的引用不可以訪問其子類對象新增的成員(包括屬性和方法), 如果硬要訪問-->強轉

--可以使用instanceof關鍵字來判斷一下這個變數是不是這個類或者是這類的子類

 

13, 抽象類別(方法)---類的擴充

--使用abstract關鍵字修飾的類(方法)

--含有抽象方法的類必須被聲明為抽象類別

--抽象類別不能被執行個體化

--抽象方法只需要聲明, 不需要被實現

 

14, 介面(一種特殊的抽象類別, 所有的方法是一個抽象方法)---類需要實現的功能        --文法定義:            public interface InterfaceTest{                        }        -- 一個類去實現一個介面, 使用implements關鍵字:            public class test implements InterfaceTest{                        }        --多個無關的類可以實現同一個介面        --一個類可以實現多個無關的介面(注意避免介面方法重名的現象)        --與繼承關係類似, 介面與實作類別之間存在多態性        --介面中的屬性預設為 public static final 也只能是public static final的        --介面中只能定義沒有實現的方法, 預設為 public, 也只能是 public, 介面可以繼承其他的介面並添加新的屬性和方法(沒有實現的)        --從JDK1.8以後介面開始可以有實現的方法, 使用default關鍵字修飾

--end--

 

Java-物件導向(基礎知識)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.