国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

類型轉化與final修飾符

2019-11-18 15:28:02
字體:
來源:轉載
供稿:網友
1.final修飾符

    有時候,你不希望別人坐享其成,通過繼續(xù)你寫的類得到他自己所需要的類,怎么辦呢?這個時候你就可以在你的class之前加上final這個修飾府,例如public final class test{……},加上了這個修飾符之后,別人在繼續(xù)這個類的話就會編譯出錯,提示他這個類不能構建子類。從這我們可以看出,final修飾符和abstract修飾符是不能同時使用的,因為abstract類可以說是專門用來繼續(xù)的,而final類則不能用于繼續(xù)。

    那么假如是在方法的前面加上final修飾符有什么作用呢?比如說A類中有個聲明為final的方法a(){….},那么B繼續(xù)A的時候,B就不能覆蓋方法a(){….},否則編譯出錯,提示Cannot override the final method from A。此外,假如一個類聲明為final類的話,它里面所有的方法都自動成為final類型的。

    自然的,你肯定會問,假如一個域申明為final的時候有什么作用?一個屬性聲明為final之后,你不能在對它重新進行賦值,否則編譯報錯,The final field ×× cannot be assigned。另外,請注重,類聲明為final的時候,僅僅它的方法自動變?yōu)閒inal,而屬性則不會。

2.類型轉化:

    類型轉換是java編程中比較常見的一種操作,非凡是基本數(shù)據(jù)類型之間的轉換,如long型轉化為int型,int轉化為long等等。

    類型的轉化可以分成兩類:強制轉化與自動轉化,例如long i=1;這個就叫自動轉化,而int i=(long)1L,就是強制轉化,這里我們主要討論類對象之間的轉化,還是以下面的代碼為例:

public class PolymorphicTest {
       public PolymorphicTest() {       }
       public void setName(String n){
                     this.name=n;
                      System.out.PRintln(“在父類中”); 
                                      } 
 public String getName(){
               return this.name;
                             }
                                    private String name;}

public class PolymorphicChild extends PolymorphicTest {
       public void setArea(String a){
              this.area=a;              }
       public String getArea(){ 
             return this.area;              }
//public void setName(String n){//   super(“n”);
//   System.out.pirngln(“在子類中”);
//   }
       public static void main(String[] args) {
              PolymorphicChild child=new PolymorphicChild(); 
             PolymorphicTest test[]=new PolymorphicTest[2]; 
             test[0]=child; 
       PolymorphicChild cast=(PolymorphicChild)test[0]; 
       test[0].setName(“zhukai”);
              test[1]=new PolymorphicTest();       } 
      private String area;}

PolymorphicChild同時包含了兩種轉化,test[0]=child是自動轉化,而

PolymorphicChild cast=(PolymorphicChild)test[0]就是強制轉化,假如沒有

(PolymorphicChild)的話編譯就會出錯,

    cannot convert from PolymorphicTest to PolymorphicChild,那么是不是PolymorphicTest類型的對象都可以強制轉化成PolymorphicChild類型的呢?例如,我們有這么一行代碼:

    PolymorphicChild cast=(PolymorphicChild)test[1]會不會出錯呢?結果是編譯不會出錯,但是運行的時候會出錯,ClassCastException。那么什么時候才可以進行強制類型轉化呢?

    首先,它們必須是同一個家族的,之間有繼續(xù)關系;

    其次,假設有A的對象a,B的對象b,B是A的子類,什么條件下才能把a強制轉化成B型別呢?a必須指向(refer to)B或者其子類的一個對象,即進行下運算a instanceof B即可,若返回值為ture即可,否則有錯誤。在本例中假如System.out.println(test[1] instanceof PolymorphicChild)將會輸出“false”,System.out.println(test[0] instanceof PolymorphicChild)將會輸出“true”。

3.抽象類

抽象類的用處是十分大的,非凡是對于OOP而言,關于抽象類,總結幾點:

a.  抽象類不能實例化,即不能對其用new運算符;

b.  類中假如有一個或多個abstract方法,則該類必須聲明為abstract;

c.  抽象類中的方法不一定都是abstract方法,它還可以包含一個或者多個具體的方法;

d.  即使一個類中不含抽象方法,它也可以聲明為抽象類;

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 西畴县| 威信县| 衡水市| 本溪市| 定结县| 永丰县| 兴文县| 信阳市| 伊川县| 扎赉特旗| 沐川县| 娱乐| 石泉县| 萨嘎县| 泌阳县| 五指山市| 石家庄市| 那坡县| 嫩江县| 积石山| 成都市| 壶关县| 冕宁县| 如东县| 大邑县| 板桥市| 宜昌市| 谢通门县| 河东区| 威信县| 崇左市| 瑞金市| 临高县| 鹤峰县| 鄂尔多斯市| 二手房| 永定县| 乌恰县| 清水河县| 治县。| 罗江县|