17 類別(2)-類別的修飾子
[17-1類別(Class)的修飾子]
class關鍵字之前的public、abstract、final稱為修飾子。
格式:
[ 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