標籤:抽象類別 構造 test oca 聲明 icc round 問題: 抽象
問題:對象的某個屬性的值不能是隨意的,必須為固定的一組取值當中的某一個
解決的方法:
1) 在setGrade方法中做推斷,不符合格式要求就拋出異常
2) 直接限定使用者的選擇,通過自己定義類類比枚舉的方式來限定使用者的輸入
寫一個Grade類。私人建構函式,對外提供5個靜態常量表示類的執行個體
3) jdk5中新定義了枚舉類型,專門用於解決此類問題
4) 枚舉就是一個特殊的java類,能夠定義屬性、方法、建構函式、實現介面、繼承類
packagecn.itcast.enumeration;
import org.junit.Test;
publicclass Demo1 {
@Test
public void test() {
print(Grade.B);
}
public void print(Grade g) // A B C D E
{
String value=g.getValue();
System.out.println(value);
}
}
/*
* class Grade{ private Grade(){ }
* public static final Grade A=new Grade();
* public static final Grade B=new Grade();
* public static final Grade C=new Grade();
* public static final Grade D=new Grade();
* public static final Grade E=new Grade();
* }
*/
//怎樣定義枚舉的建構函式、方法、欄位
enumGrade {// class A 100-90 B 89-80 C 79-70 D 69-60 E 59-0
A("100-90"), B("89-80"),C("79-70"), D("69-60"), E("59-0");// object
private String value;
private Grade(String value){
this.value=value;
}
public String getValue(){
return this.value;
}
}
publicclass Demo1 {
@Test
public void test() {
print(Grade.B); //89-80,良
}
public void print(Grade g) // A B C D E
{
String value=g.getValue();
String value2=g.localeValue();
System.out.println(value+","+value2);
}
}
//帶抽象方法的枚舉
enumGrade {// class A 100-90優 B89-80良 C 79-70 一般D 69-60差 E 59-0不及格
A("100-90"){
public String localeValue(){
return "優";
}
},
B("89-80"){
public String localeValue(){
return "良";
}
},
C("79-70"){
public String localeValue(){
return "一般";
}
},
D("69-60"){
public String localeValue(){
return "差";
}
},
E("59-0"){
public String localeValue(){
return "不及格";
}
};// object
private String value;
private Grade(String value){
this.value=value;
}
public String getValue(){
return this.value;
}
public abstract String localeValue();
}
//枚舉類就是一個java類。也能夠聲明屬性。方法,建構函式
public enum Grade4 {
A("90-100"),B("80-89"),C("70-79"),D("60-69"),E("0-59");
privateString value;
privateGrade4(String value) {
this.value= value;
}
publicString getValue() {
returnvalue;
}
}
//枚舉類就是一個java類, 也能夠繼承抽象和實現介面
public enum Grade5 {
// 抽象類別不能建立執行個體對象
A("90-100"){
//new了一個Grade5的子類執行個體
publicString toLocaleString() {
return"優";
}
}
,B("80-89"){
//new了一個Grade5的子類執行個體
publicString toLocaleString() {
return"良";
}
}
,C("70-79"){
//new了一個Grade5的子類執行個體
publicString toLocaleString() {
return"中";
}
}
,D("60-69"){
//new了一個Grade5的子類執行個體
publicString toLocaleString() {
return"差";
}
}
,E("0-59"){
//new了一個Grade5的子類執行個體
publicString toLocaleString() {
return"不及格";
}
};
privateString value;
privateGrade5(String value) {
this.value= value;
}
publicString getValue() {
returnvalue;
}
// 對外提供一個方法。返回枚舉的本地資訊
// 一個方法不知道怎樣實現,能夠定義為抽象的
publicabstract String toLocaleString();
}
java 基礎之枚舉