接口中同一个方法不写public,为什么在实现类中一定要写public呢?

来源:互联网 发布:java获取泛型的class 编辑:程序博客网 时间:2024/05/18 01:48
首先,接口中所有方法默认都是public,至于为什么要是public,原因在于如果不是public,那么只能在同个包下被实现,可访问权限就降低很多了,那么在实现类中,实现的类相当于子类,子类的访问权限是不能比父类小的,而在java中一个类如果没有权限的修饰符,默认是friendly(同一个包内的其它类才可访问),所以在实现类中一定要写public
补充:

访问权限   类   包  子类  其他包描述

    public     ∨   ∨   ∨     其它楼房的人也能用我, 外星人不能用我

    protect    ∨   ∨   ∨     ×只有我自己和与我住在同一个楼房里的人以及我的子孙能用我

    default    ∨   ∨   ×    ×只有我自己和与我住在同一个楼房里的人能用我

    private    ∨   ×   ×   ×只有我自己可以用我

Java中所谓的“friendly”和“default”都只是一种说法,并不是说真有那么一个指定默认访问权限的关键字(default倒的确是个语言关键字,但那是用在switch语句中的,跟楼主的问题无关)。

Java中类的成员权限修饰符只有三个:public/private/protected。
当一个类的成员前面没有任何访问权限修饰符修饰时,我们就说他是“fiendly权限”,或者“default权限”(注意,只是这样“说”,并不是主你可以那样写上去)。这种说法指的就是那种可以从package内部或子类中访问的成员。

C++中也没有“friendly”,只有一个“friend”,但那是另一个意思。它虽然跟访问权限有点关系,但并不是一个访问权限修饰符,C++的权限修饰符也是只有那3种。而且C++默认的是private,这点也跟Java不一样。

C#倒是给另外一种“默认的”权限修饰符赋于了一个真正的语言关键字:internal。即写上internal跟不写是一个意思。
0 0