溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

關(guān)于java的final關(guān)鍵字介紹

發(fā)布時(shí)間:2020-07-29 18:03:00 來源:網(wǎng)絡(luò) 閱讀:238 作者:nineteens 欄目:編程語言

  protected

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

  final 修飾常量

  只要是該常量代入的計(jì)算式,在編譯時(shí)期,就會(huì)被執(zhí)行計(jì)算,以減輕運(yùn)行時(shí)的負(fù)擔(dān)。(只對基本數(shù)據(jù)類型的計(jì)算式,奏效)

  final 修飾引用

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

  空白 final

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

  這樣就可以靈活的為其進(jìn)行賦值,但是又保持了其不可更改的特性 ;

  final 參數(shù)

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

  final 方法

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

  final 類

  final類不可被繼承,final類的方法,都被隱式的設(shè)定為final,但是域,不是final的,可以根據(jù)自己的意愿來設(shè)定 ;

  子父類中同名的 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”);

  }

  }

  它們之間是沒有任何關(guān)系的;只是恰巧重名了 ;它們不能發(fā)生多態(tài)的行為;

  方法的覆蓋和向上轉(zhuǎn)型,只針對方法是父類中能被子類繼承的方法 ;因此,它們之間是沒有向上轉(zhuǎn)型、覆蓋的說法的,也就沒有多態(tài)的行為;

  java中的前期綁定

  我們都知道,java是采用后期綁定的;

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

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

  對了 構(gòu)造器也是前期綁定,因?yàn)?,其?shí),那個(gè)構(gòu)造器是隱式的static方法 ;

  免疫多態(tài)

  域 和 靜態(tài)方法 是不會(huì)產(chǎn)生多態(tài)行為的 ;

  任何對 域 的操作,都是在 編譯時(shí)期 完成的,此時(shí)編譯器認(rèn)為父類引用的就是父類的對象,因此,根本不存在多態(tài)的可行性;

  靜態(tài)方法,不存在多態(tài)的原因是:靜態(tài)方法 是 前期綁定,此時(shí)編譯器,也是單純的認(rèn)為,父類引用指向的就是父類對象,天真!

  對于它們,是 編譯看左邊,運(yùn)行看左邊;

  class A {

  public int a = 1 ;

  private void haha(){

  System.out.println("A");

  }無錫哪家醫(yī)院婦科好 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 ;都是輸出父類的。  


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI