常量(這裏的常量指的是實例常量:即成員變量)賦值:java
①在初始化的時候經過顯式聲明賦值。Final int x=3;設計
②在構造的時候賦值。對象
局部變量能夠隨時賦值。繼承
利用final定義方法:這樣的方法爲一個不可覆蓋的方法。編譯
Public final void print(){};程序設計
爲了保證方法的一致性(即不被改變),可將方法用final定義。class
若是在父類中有final定義的方法,那麼在子類中繼承同一個方法。變量
若是一個方法前有修飾詞private或static,則系統會自動在前面加上final。即private和static方法默認均爲final方法。程序
注:final並不涉及繼承,繼承取決於類的修飾符是否爲private、default、protected仍是public。也就是說,是否繼承取決於這個方法對於子類是否可見。方法
Abstract(抽象)能夠修飾類、方法
若是將一個類設置爲abstract,則此類必須被繼承使用。此類不可生成對象,必須被繼承使用。
Abstract能夠將子類的共性最大限度的抽取出來,放在父類中,以提升程序的簡潔性。
Abstract雖然不能生成對象,可是能夠聲明,做爲編譯時類型,但不能做爲運行時類型。
Final和abstract永遠不會同時出現。
當abstract用於修飾方法時,此時該方法爲抽象方法,此時方法不須要實現,實現留給子類覆蓋,子類覆蓋該方法以後方法纔可以生效。
注意比較:
private void print(){};此語句表示方法的空實現。
Abstract void print(); 此語句表示方法的抽象,無實現。
若是一個類中有一個抽象方法,那麼這個類必定爲一個抽象類。
反之,若是一個類爲抽象類,那麼其中可能有非抽象的方法。
若是讓一個非抽象類繼承一個含抽象方法的抽象類,則編譯時會發生錯誤。由於當一個非抽象類繼承一個抽象方法的時候,本着只有一個類中有一個抽象方法,那麼這個類必須爲抽象類的原則。這個類必須爲抽象類,這與此類爲非抽象衝突,因此報錯。
因此子類的方法必須覆蓋父類的抽象方法。方法纔可以起做用。
只有將理論被熟練運用在實際的程序設計的過程當中以後,才能說理論被徹底掌握!
爲了實現多態,那麼父類必須有定義。而父類並不實現,留給子類去實現。此時可將父類定義成abstract類。若是沒有定義抽象的父類,那麼編譯會出現錯誤。
Abstract和static不能放在一塊兒,不然便會出現錯誤。(這是由於static不可被覆蓋,而abstract爲了生效必須被覆蓋。)
例:(本例已存在\CODING\abstract\TestClass.java文件中)
public class TestClass{
public static void main(String[] args){
SuperClass sc=new SubClass();
Sc.print();
}
Abstract class SuperClass{
Abstract void print();}
}
class SubClass extends SuperClass(){
void print(){
System.out.println(「print」);}
}