java中為什么接口中的屬性和方法都默認(rèn)為public
4)為什么接口中的屬性和方法都默認(rèn)為public?Sun公司當(dāng)初為什么要把java的接口設(shè)計(jì)發(fā)明成這樣? 【新手可忽略不影響繼續(xù)學(xué)習(xí)】
答:如上所述,馬克-to-win:既然接口強(qiáng)于抽象類能勝任作為和外部系統(tǒng)打交道的合同。換句話說,一般來講和外部系統(tǒng)打交道,自然考慮用“接口”。“外部”二字自然讓我們做出如下結(jié)論:屬性和方法都應(yīng)默認(rèn)為public。因?yàn)槭呛屯獠肯到y(tǒng)打交道,存在很大的未知性,馬克-to-win:我并不知道未來外部別人怎么用我們的接口,所以盡量少給別人設(shè)置障礙(少添點(diǎn)堵),就設(shè)置權(quán)限為public,出于這種考慮,Sun公司一開始就規(guī)定,接口屬性和方法默認(rèn)就為public。
馬克- to-win:馬克 java社區(qū):防盜版實(shí)名手機(jī)尾號: 73203。
5)Sun公司把接口設(shè)計(jì)成合同的作用,有什么意義, 舉個實(shí)例?【新手可忽略不影響繼續(xù)學(xué)習(xí)】
答:馬克-to-win,比如我有一個系統(tǒng),如果我想完成我的功能,我要求給我的參數(shù)只有滿足一定的條件才可以讓我系統(tǒng)正常工作。這個條件我當(dāng)然必須得在合同中規(guī)定出來?。ó?dāng)然這里合同就是接口),參見以下的例子:馬克-to-win, QuerySystem(查詢系統(tǒng))是個外部系統(tǒng)。它可以接受任何類型的對象,只要你實(shí)現(xiàn)Priceable這個接口,樂意遵守Priceable訂的合同,Car和Soap樂意遵守,于是就能進(jìn)入系統(tǒng)讓QuerySystem正常工作,馬克-to-win:而Mountain不遵守合同(拒不實(shí)現(xiàn)Priceable訂立的接口),于是即使想進(jìn)入系統(tǒng),也會報(bào)語法錯誤。肥皂和車都可定價(priceable),山不能被定價。
例1.6.2:---本章源碼
interface Priceable{
double getPrice();
}
class SoapMark_to_win implements Priceable {
double price;
SoapMark_to_win(double price) {
this.price = price;
}
public double getPrice()
{
return price;
}
}
class Car implements Priceable {
public double getPrice()
{
return 0;
}
}
class Mountain {//這里mountain未實(shí)現(xiàn)接口
double height;
Mountain(double height)
{
this.height=height;
}
}
class QuerySystem{
Priceable pIn;
/* 下句話表示, QuerySystem,只接受實(shí)現(xiàn)了Priceable類型的對象,馬克-to-win:只接受按Priceable這個合同辦事的人,能接受Car, SoapMark_to_win,不能接受Mountain, 因?yàn)樗麤]有實(shí)現(xiàn)Priceable接口*/
void accept(Priceable p)
{
pIn=p;
}
void printInfo()
{
System.out.println(pIn.getPrice());
}
}
public class Test {
public static void main(String[] args) {
QuerySystem qs=new QuerySystem();
Car car=new Car();
SoapMark_to_win soap=new SoapMark_to_win(8);
Mountain mountain=new Mountain(2000);//馬克-to-win:
qs.accept(soap);
qs.printInfo();
qs.accept(car);
qs.printInfo();
// qs.accept(mountain);//錯誤,未遵守合同,未實(shí)現(xiàn)接口,直接報(bào)錯
}
}
輸出結(jié)果:
8.0
0.0