枚举类能继承吗?能被继承吗?
枚舉的作用:限定“數(shù)據(jù)集”中的元素的個(gè)數(shù)(將類理解為一個(gè)集合)、即限定枚舉類對(duì)象的個(gè)數(shù)。
如果一個(gè)類的實(shí)例是有限且確定的,那么可以使用枚舉類。比如:季節(jié)類,只有春夏秋冬四個(gè)實(shí)例。
枚舉類與普通類的區(qū)別:
1.枚舉類也是類,也可以有自己的成員變量,成員方法,靜態(tài)方法、靜態(tài)變量等,也能實(shí)現(xiàn)其他的接口,不能繼承其他類了(因?yàn)橐呀?jīng)繼承了java.lang.Enum)。枚舉類的對(duì)象默認(rèn)都是public static final?
2.枚舉類與普通類的不同在于,它的構(gòu)造器私有,這也決定了它如果需要被繼承時(shí)的特殊性。若果其它的外部類A繼承它,由于在構(gòu)造類A的對(duì)象時(shí),需要調(diào)用父類的構(gòu)造方法,由于枚舉類的構(gòu)造器私有,所有無法調(diào)用,導(dǎo)致枚舉類不可以被其它的外部類繼承。但是有沒有辦法去繼承它?答案是有的,那就需要用到內(nèi)部類了(內(nèi)部類能訪問外部類的任何成員,當(dāng)然能訪問已被私有的構(gòu)造器了)。
?
例子:簡(jiǎn)單模擬下交通燈*********************************************
public?enum?TrafficLamp?{
//由于枚舉值默認(rèn)式public,final,static,按照規(guī)范變量名全部大寫
//正是由于枚舉值的這一特性,為我們實(shí)現(xiàn)單列提供了一種很好的方案
//注意此時(shí)的枚舉值都是引用,相當(dāng)于public?static?final?TrafficLamp?RED?=?new??//TrafficLamp();
RED{//匿名內(nèi)部類,RED指向繼承了TrafficLamp的子類對(duì)象,以下同理
public?TrafficLamp?state(){
try?{
Thread.sleep(30000);
}?catch?(InterruptedException?e)?{
e.printStackTrace();
}
return?GREEN;
}
},GREEN{
public?TrafficLamp?state(){
try?{
Thread.sleep(60000);
}?catch?(InterruptedException?e)?{
e.printStackTrace();
}
return?YELLOW;
}
},YELLOW{
public?TrafficLamp?state(){
try?{
Thread.sleep(3000);
}?catch?(InterruptedException?e)?{
e.printStackTrace();
}
return?RED;
}
};
private?TrafficLamp(){}
private?TrafficLamp(int?time){
}
public?abstract?TrafficLamp?state();
//簡(jiǎn)單的模擬
}
public?static?void?main(String[]?args)?{
Boolean?flag=true;
While(flag){
RED.state().state().state();
}
}
?
總結(jié)
以上是生活随笔為你收集整理的枚举类能继承吗?能被继承吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WSP框架:WEB组件的原理
- 下一篇: 接口与抽象类的比较