類包含了數據與方法,將數據與方法放在一個類中就構成了封裝(通常來講,將屬性私有化,而且生成setter和getter方法)。它指的是將對象的狀態信息隱藏在對象內部,不容許外部程序直接訪問對象的內部信息,而是經過該類所提供方法來實現對內部信息的操做和訪問。把隱藏的東西隱藏,將該暴露的東西暴露.通常是經過訪問控制符完成封裝。java
Java中的訪問權限控制符有四個.
做用域 當前類 同一package 子孫類 其餘package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
沒有時默認爲friendly,如構造函數等~
在Java語言中有4種訪問修飾符:package(默認)、private、public和protected.
1。package是默認的保護模式,又叫作包訪問,沒有任何修飾符時就採用這種保護模式。包訪問容許域和方法被同一個包內任何類的任何方法訪問。(包內訪問)
2。private標識的訪問模式,表示私有的域和方法只能被同一個類中的其餘方法訪問,實現了數據隱藏;必要時,能夠經過方法訪問私有變量。(類內訪問)
3。public修飾符用於暴露域和方法,以便在類定義的包外部能訪問它們。對包和類中必要的接口元素,也須要使用這個級別;main()方法必須是public的,toString()方法也必須是public的。通常不會用public暴露一個域,除非這個域已經被聲明爲final。(跨包訪問)
4。protected修飾符提供一個從包外部訪問包(有限制)的方法。在域和方法前增長protected修飾符不會影響同一個包內其餘類和方法對它們的訪問。要從包外部訪問包(其中含有protected成員的類),必須保證被訪問的類是帶有protected成員類的子類。也就是說,但願包中的一個類被包以外的類繼承重用時,就可使用這個級別。通常應該慎用。(包中類被包外類繼承重用)函數
new關鍵字所作的工做:學習
① 爲對象開闢內存空間
② 調用類的構造方法
③ 將生成的對象的地址返回this
方法與屬性的分配:spa
若是一個類包含了屬性和方法,那麼該類的每個對象都有本身的屬性,可是不管有多少個對象,這些對象共享一個方法。.net
重載:code
構造方法重載時,只需看參數便可。orm
使用this():對象
在一個構造方法中調用另一個構造方法,可使用this(),this()中的參數根據調用的構造函數肯定。this()語句必須做爲構造方法的第一條語句blog
Java是單繼承的,意味着一個類只能繼承一個父類,使用extends關鍵字。
繼承關係中構造方法的調用:
生成子類對象時,Java默認地首先調用父類的不帶參數的構造方法,並執行該構造方法,生成父類的對象。接下來纔是調用子類的構造方法,生成子類的對象。(便是想要生成子類對象,必須先生成父類的對象,沒有父類的對象就沒有子類的對象)
package com.blog; /** *基類 */ class SuperTest { private String age; public SuperTest(String age) { this.age = age; System.out.println(this.age); } public String getAge() { return age; } public void setAge(String age) { this.age = age; } } /** *導出類 */ public class Test extends SuperTest{ private String name; public Test(String age,String name) { super(age); //調用基類的構造方法. this.name = name; System.out.println(this.name); } public static void main(String[] args) { Test test = new Test("50", "itcast"); } } //output:50 itcast ~~//
使用super關鍵字:
super表示對父類對象的引用。
使用了super顯示的調用父類的某個構造方法後,那麼在執行的時候就尋找super()對應的構造方法而再也不尋找父類的不帶參數的構造方法。super必須做爲構造方法的第一條執行語句。
① 父類有的,子類也有
② 父類沒有的,子類能夠有
③ 父類有的,子類能夠改變
① 構造方法不能被繼承
② 方法和屬性能夠被繼承
③ 子類的構造方法隱式地調用父類的無參構造方法,即java.lang.Object是被默認繼承的.
④ 當父類沒有不帶參數的構造方法時,子類須要使用super關鍵字來顯示調用父類的構造方法。super指的是父類的引用
⑤ super關鍵字必須是構造方法中的第一句。
當兩個方法造成重寫關係時,能夠在子類中經過super關鍵字調用父類被重寫的方法。此時的super關鍵字沒必要放在第一句,而是根據邏輯決定。
多態指的是父類型的引用能夠指向子類的對象。(蘋果是水果,足球是球).Java中的引用變量有兩種, 一種是編譯時類型由聲明該變量時使用的類型決定,還有一種是運行期類型由實際賦給變量的對象決定.若是編譯時和運行時類型不一致,就會出現多態.
Parent p = new Child();
p.execute();
當使用多態調用方法時,首先檢查父類中是否有被調用的方法,若是沒有則編譯出錯;若是有,再去調用子類的方法。
① 向上類型轉換(upcast):將子類型轉換成父類型。對於向上類型轉換,不須要顯示指定:
Parent p = new Child();
② 向下類型轉換(downcast):將父類型轉換爲子類型。對於向下類型轉換,必需要顯示指定,使用強制類型轉換:
Parent p = new Child();
Child child = (Child)p;
如下的編譯不會出錯,運行時頗有能報錯(ClassCastException):
Parent p = new Parent();
Child child = (Child)p;
若是用instaceof判斷一下是否屬於類或者子類的一個實例.
if(child instaceof Parent){
Child child = (Child)p;
}
繼承是實現類重用的重要手段,可是它會帶來一個大的壞處:破環封裝.相比之下,組合也是實現類重用的方式.而採用組合方式可以更好的提供類的封裝.
ps:Java中面向對象思想其實不難理解,可是有的時候又很是讓人頭疼.我只是總結一點經常使用的知識點.其實還有不少本身到如今還搞不明白.計算機將現實中的東西抽象出來的思惟.本身理解的還不夠透徹....
----------------------- JavaEE/物聯網技術交流、java培訓、java學習型技術博客、期待與您交流! ----------------------