17   類別(2)-類別的修飾子

[17-1類別(Class)的修飾子]

class關鍵字之前的publicabstractfinal稱為修飾子。

格式:

[ public|abstract|final ] class 類別名稱 {

       宣告資料(變數及常數)欄位(Field)

       定義執行演算及其他操作的方法(Method)

}

 

[17-2公開類別及非公開類別-public存取修飾子]

沒有宣告為public時稱為非公開類別,僅能被同一package(套件、程式集)內的class存取,宣告為public時稱為公開類別,則允許同一package外之所有其他class來存取。

package將於存取權限控制章節說明。

 

[17-3抽象類別(abstract class)]

不描述處理內容,只定義呼叫方式的方法,稱為抽象方法(abstract method)。而擁有抽象方法的類別稱為抽象類別(abstract class)

抽象類別不能建立物件,需經繼承並覆寫抽象方法,才可建立物件。

abstractclass AbstScore1{ //抽象類別

   int chi = 79 ;

   int eng = 81 ;

   float tot ;

   float ave ;

   abstract void abstTot() ; //抽象方法

     void abstAve() {

     ave = tot / 2;

     System.out.println("平均分數=" + ave) ;

   }

}

 

class TotAve1 extends AbstScore1 {

   void abstTot() {

     tot = chi + eng ;

     System.out.println("總分=" + tot) ;

   }

}

<抽象類別建立物件-錯誤>

class AbstMain1 {

   public static void main (String[] args) {

     AbstScore1 ta1 = new AbstScore1 ();

     ta1.abstAve() ;

   }

}

編譯結果:C:\js>javac AbstMain1.java

abstMain1.java:16: error: abstScore1 is abstract; cannot be instantiated

   abstScore1 ta1 = new abstScore1 ();

                     ^

1 error

 

<抽象類別經由繼承建立物件-正確>

class AbstMain2 {

   public static void main (String[] args) {

     TotAve1 ta1 = new TotAve1();

     ta1.abstTot() ;

     ta1.abstAve() ;

   }

}

執行結果:C:\js>java AbstMain2

總分=160.0

平均分數=80.0

 

 

[17-4 final修飾子(final class)]

final是用來修飾欄位、方法與類別的修飾子。加上final修飾子的欄位,其值不可以被修改。加上final修飾子的方法,該方法不可以被覆寫。而加上final修飾子的類別,則不可以被繼承。

本章節僅先說明final class

 

[final class範例]

加上final修飾子的類別,不可以被繼承。

final class FinalFat2{

   void finalmd3(){

     int y = 20 ;      

     System.out.println("y=" +y);

   }

}

 

class FinalsSon2 extends FinalFat2{ }   //不能被繼承

class FinalMain2{

   public static void main(String[] args){

     FinalSon2 fc2 = new FinalSon2();

     fc2.finalmd3();

   }

}

編譯結果:C:\js>javac FinalMain2.java

FinalMain2.java:1: error: cannot inherit from final FinalFat2

class FinalsSon2 extends FinalFat2{ }   //不能被繼承

                         ^

FinalMain2.java:4: error: cannot find symbol

   FinalSon2 fc2 = new FinalSon2();

   ^

symbol:   class FinalSon2

location: class FinalMain2

FinalMain2.java:4: error: cannot find symbol

   FinalSon2 fc2 = new FinalSon2();

                     ^

symbol:   class FinalSon2

location: class FinalMain2

3 errors

 

加上final修飾子的類別,可直接建立物件。

class FinalMain3{

   public static void main(String[] args){

     FinalFat2 fc2 = new FinalFat2();

     fc2.finalmd3();

  }

}

執行結果:C:\js>java FinalMain3

y=20

arrow
arrow
    創作者介紹
    創作者 祈泊 的頭像
    祈泊

    祈泊的部落格

    祈泊 發表在 痞客邦 留言(0) 人氣()