類別(Class)的修飾子
class關鍵字之前的public、abstract、final稱為修飾子。
格式:
[ 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修飾子的欄位,其值不可以被修改。加上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
沒有留言:
張貼留言