利用final定義方法:這樣的方法爲一個不可覆蓋的方法。

 

常量(這裏的常量指的是實例常量:即成員變量)賦值: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類。若是沒有定義抽象的父類,那麼編譯會出現錯誤。

 

Abstractstatic不能放在一塊兒,不然便會出現錯誤。(這是由於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」);}

}

相關文章
相關標籤/搜索