国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 游戏| 抚远县| 台江县| 天津市| 会东县| 富宁县| 林西县| 桑日县| 凉城县| 宜兴市| 得荣县| 武定县| 德化县| 额济纳旗| 永定县| 山阴县| 温泉县| 石阡县| 诸暨市| 沙坪坝区| 武定县| 琼结县| 韩城市| 闻喜县| 华容县| 体育| 沙田区| 文水县| 保山市| 双流县| 石狮市| 本溪市| 益阳市| 乌恰县| 湖南省| 曲靖市| 宁明县| 双峰县| 班戈县| 安阳县| 永川市|