java中为什么接口中的属性和方法都默认为public
4)为什么接口中的属性和方法都默认为public?Sun公司当初为什么要把java的接口设计发明成这样? 【新手可忽略不影响继续学习】
答:如上所述,马克-to-win:既然接口强于抽象类能胜任作为和外部系统打交道的合同。换句话说,一般来讲和外部系统打交道,自然考虑用“接口”。“外部”二字自然让我们做出如下结论:属性和方法都应默认为public。因为是和外部系统打交道,存在很大的未知性,马克-to-win:我并不知道未来外部别人怎么用我们的接口,所以尽量少给别人设置障碍(少添点堵),就设置权限为public,出于这种考虑,Sun公司一开始就规定,接口属性和方法默认就为public。
马克- to-win:马克 java社区:防盗版实名手机尾号: 73203。
5)Sun公司把接口设计成合同的作用,有什么意义, 举个实例?【新手可忽略不影响继续学习】
答:马克-to-win,比如我有一个系统,如果我想完成我的功能,我要求给我的参数只有满足一定的条件才可以让我系统正常工作。这个条件我当然必须得在合同中规定出来!(当然这里合同就是接口),参见以下的例子:马克-to-win, QuerySystem(查询系统)是个外部系统。它可以接受任何类型的对象,只要你实现Priceable这个接口,乐意遵守Priceable订的合同,Car和Soap乐意遵守,于是就能进入系统让QuerySystem正常工作,马克-to-win:而Mountain不遵守合同(拒不实现Priceable订立的接口),于是即使想进入系统,也会报语法错误。肥皂和车都可定价(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未实现接口
double height;
Mountain(double height)
{
this.height=height;
}
}
class QuerySystem{
Priceable pIn;
/* 下句话表示, QuerySystem,只接受实现了Priceable类型的对象,马克-to-win:只接受按Priceable这个合同办事的人,能接受Car, SoapMark_to_win,不能接受Mountain, 因为他没有实现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);//错误,未遵守合同,未实现接口,直接报错
}
}
输出结果:
8.0
0.0