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