interface ursus
{
public void eat();
}
class grizzly implements ursus
{
public void eat() //Line 1
{
System.out.println("Grizzly eats Salmon ");
}
}
class polar implements ursus
{
public void eat() //Line 2
{
System.out.println("Polar eats seals ");
}
}
class ursus_test
{
public static void main(String args[])
{
grizzly g = new grizzly();
polar p = new polar();
p.eat();
g.eat();
}
}
当我从第1行/第2行中删除访问修饰符“public”时,编译器会抱怨我对从ursus接口获取的方法“eat()”应用较弱的访问权限。
这是否意味着从接口获得的所有方法都应该只是实现该接口的类的“公共”?
答案 0 :(得分:3)
根据docs
接口中的公共访问说明符表示该接口可以被任何包中的任何类使用。如果未指定接口是公共接口,则只能在与接口相同的包中定义的类中访问您的接口。
接口中声明的所有方法都是隐式公共的,因此可以省略public修饰符。如果您明确尝试添加其他访问修饰符,则编译器将投诉。
答案 1 :(得分:1)
接口中声明的方法默认为public
。这就是编译器抱怨的原因。您无法继承公共方法,然后将其设为protected
或private
。
是的,你的假设是正确的。您从界面继承的所有方法都应公开。
答案 2 :(得分:1)
您无法降低任何方法的可见性。
在界面中,默认情况下所有方法都是public
,因此您无法使其default access modifier
的可见性较低。
答案 3 :(得分:1)
当我们在interface
中定义方法签名时,它隐含public
和abstract
。 public
为class
实现的每个interface
提供了该方法的可见性。因此,根据总统职位,你应该使用public在课堂上继承这些方法。
访问修饰符的主席如下。 public>protected>default(no access modifier)> private.