2015年7月15日 星期三

15 類別(2)

15   類別(2)
類別(Class)的修飾子
class關鍵字之前的publicabstractfinal稱為修飾子。
格式:
[ public|abstract|final ] class 類別名稱 {
        宣告資料(變數及常數)欄位(Field)
        定義執行演算及其他操作的方法(Method)
}

[公開類別及非公開類別]-public存取修飾子
沒有宣告為public時稱為非公開類別,僅能被同一package(套件、程式集)內的class存取,宣告為public時稱為公開類別,則允許同一package外之所有其他class來存取。
package將於存取權限控制章節說明。




[抽象類別(abstract class)]
不描述處理內容,只定義呼叫方式的方法,稱為抽象方法(abstract method)。而擁有抽象方法的類別稱為抽象類別(abstract class)
抽象類別不能建立物件,需經繼承並覆寫抽象方法,才可建立物件。
abstract class 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







[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

沒有留言:

張貼留言