關於java的final關鍵字介紹

  protected

  用來修飾 域,代表域的訪問權限是:包權限 或者 不同包,但是是子類 ;

  final 修飾常量

  只要是該常量代入的計算式,在編譯時期,就會被執行計算,以減輕運行時的負擔。(只對基本數據類型的計算式,奏效)

  final 修飾引用

  這個有個地方需要說下,只是引用指向的對象,一經確定,就不再可以修改爲指向別的對象。但是對象本身的屬性,可以隨意改變;

  空白 final

  就是被申明爲final,但是未賦值的域 ,稱爲 空白final ;但是在使用之前,必須對其進行賦值;

  這樣就可以靈活的爲其進行賦值,但是又保持了其不可更改的特性 ;

  final 參數

  就是方法參數,被final修飾了;跟final引用一樣,無法更改其指向其他對象 ;

  final 方法

  被修飾的方法,只能被繼承,但是不能被覆蓋 ;被修飾爲final的方法,其實是用了前期綁定,因此,在之前這樣做是可以提升效率的;

  final 類

  final類不可被繼承,final類的方法,都被隱式的設定爲final,但是域,不是final的,可以根據自己的意願來設定 ;

  子父類中同名的 private 方法

  public class test {

  public static void main(String[] args) {

  A a = new B();

  a.haha(); ; // error

  a.hehe(); ; // ok

  }

  }

  class A{

  private void haha(){

  System.out.println(“A”);

  }

  public void hehe(){

  System.out.println("A");

  }

  }

  class B extends A{

  private void haha(){

  System.out.println(“B”);

  }

  }

  它們之間是沒有任何關係的;只是恰巧重名了 ;它們不能發生多態的行爲;

  方法的覆蓋和向上轉型,只針對方法是父類中能被子類繼承的方法 ;因此,它們之間是沒有向上轉型、覆蓋的說法的,也就沒有多態的行爲;

  java中的前期綁定

  我們都知道,java是採用後期綁定的;

  但是,其實在java中有的地方,也採用可前期綁定;比如:static方法、final方法;這兩種方法是前期綁定的;

  由於private是隱式的final方法,因此,private方法也是前期綁定哦;

  對了 構造器也是前期綁定,因爲,其實,那個構造器是隱式的static方法 ;

  免疫多態

  域 和 靜態方法 是不會產生多態行爲的 ;

  任何對 域 的操作,都是在 編譯時期 完成的,此時編譯器認爲父類引用的就是父類的對象,因此,根本不存在多態的可行性;

  靜態方法,不存在多態的原因是:靜態方法 是 前期綁定,此時編譯器,也是單純的認爲,父類引用指向的就是父類對象,天真!

  對於它們,是 編譯看左邊,運行看左邊;

  class A {

  public int a = 1 ;

  private void haha(){

  System.out.println("A");

  }無錫哪家醫院婦科好 http://www.bhnfk.com/

  public void hehe(){

  System.out.println("A");

  }

  public static void aa(){

  System.out.println("aa");

  }

  }

  class B extends A{

  public int a = 2 ;

  private void haha(){

  System.out.println(“B”);

  }

  public static void aa(){

  System.out.println("bb");

  }

  }

  public class test {

  public static void main(String[] args) {

  A a = new B();

  System.out.println(a.a);

  a.aa();

  }

  }

  // output:1 aa ;都是輸出父類的。  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章