面向對象的三個特性:java
封裝,隱藏了類的內部實現機制,能夠在不影響使用的狀況下改變類的內部結構,同時也保護了數據。對外界而言,它的內部細節是隱藏的,暴露給外界的只是它的訪問方法。編程
對於封裝而言,一個對象所封裝的是本身的屬性和方法,因此不須要依賴其餘對象就能夠完成本身的操做。 三大好處:函數
繼承所描述的是**「is-a」**的關係,若是有兩個對象A和B,若能夠描述爲「A是B」,則能夠表示A繼承B,其中B被繼承者稱之爲父類或者超類,A是繼承者稱之爲子類或者派生類。this
實際上,子類是父類的特殊化,它除了擁有父類的特性外,還擁有本身獨有的特性。同時繼承關係中,子類能夠替代父類,反之不行,例如貓是動物,但不能說動物就是貓。code
使用繼承需注意三句話:orm
多態,指程序中定義的引用變量所指向的具體類型和經過該引用變量發出的方法調用在編程時並不肯定,而是在程序運行期間才肯定。對象
實現多態的三個必要條件:繼承
實現多態的形式:接口
另外,在繼承鏈中對象方法的調用,存在一個優先級: this.show(O) -> super.show(O) -> this.show((super)O) -> super.show((super)O)內存
使用BigDecimal,而且採用setScale()方法來設置精確度,同時使用RoundingModel.HALF_UP表示數字舍入法則。
double f = 111231.5473; BigDecimal b = new BigDecimal(f); double r = b.setScale(2, RoundingModel.HALF_UP).doubleValue();
java.text.DecimalFormat df = new java.text.DecimalFormat(" #.00"); df.format(須要格式化的數字);
注: #.00,表示兩位小數 #.0000,表示四位小數
double d = 3.1415926; String result = String.format("%.2f", d);
%.2f,%.表示小數點前任意位數, 2表示兩位小數,格式後的結果爲f,表示浮點型
抽象類注意點:
接口,自己就不是類,是抽象類的延伸。 接口注意點:
被static修飾的成員變量和方法是獨立於該類的,不依賴與某個特定的實例對象,也就是被該類的全部實例對象共享。全部實例對象的引用都指向同一個地方,任何一個實例對其的修改都會致使其餘實例的變化。
static修飾的變量稱之爲靜態變量,沒有用static修飾的成爲成員變量。區別是:
static修飾的方法,爲靜態方法,經過類名對其進行直接調用。在類加載時就存在了,不依賴於任何實例對象,因此static方法必須實現,不能是抽象方法abstract
被static修飾的代碼塊,成爲靜態代碼塊,隨着類的加載一併執行,並且能夠隨意放
將一個類的定義放在另外一個類的定義內部,這就是內部類。
使用內部類的緣由:每一個內部類都能獨立地繼承一個接口的實現,因此不管外圍類是否已經繼承了某個接口的實現,對於內部類都沒有影響。
接口只是解決了部分問題,而內部類使得多重繼承的解決方案變得更加完整。
當咱們建立一個內部類的時候,它無形中就與外圍類有了一種聯繫,依賴於這種聯繫,它能夠無限制地訪問外圍類的元素。
java中內部類主要分爲:
成員內部類,是外圍類的一個成員,因此它是能夠無限制的訪問外圍類的全部成員屬性和方法,儘管是private,可是外圍類要訪問內部類的成員屬性和方法則須要經過內部類的實例來訪問。
使用注意:
局部內部類,嵌套在方法的做用域內,對於這個類的使用主要是應用與解決比較複雜的問題,想建立一個類來輔助咱們的解決方案,但又不但願這個類是公用的。
使用static修飾的內部類,稱之爲靜態內部類。靜態內部類與非靜態內部類之間存在一個最大的區別:非靜態內部類在編譯完成後會隱含地保存着一個外圍類的引用,可是靜態內部類沒有。意味着: