3
   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();

 }

}

当我从 Line1/Line 2 中删除访问修饰符“public”时,编译器抱怨我正在对从 ursus 接口获得的方法“eat()”应用较弱的访问权限。

这是否意味着从接口获得的所有方法都应该只在实现该接口的类上是“公共的”?

4

4 回答 4

3

根据文档

接口中的公共访问说明符表示该接口可以被任何包中的任何类使用。如果您没有指定接口是公共的,那么您的接口将只能被定义在与接口相同的包中的类访问。

接口中声明的所有方法都是隐式公共的,因此可以省略 public 修饰符。如果您明确尝试添加其他访问修饰符,那么编译器会抱怨。

于 2013-08-20T04:37:10.923 回答
1

当我们在其中定义方法签名时,interface它是隐式的publicand abstractpublic让每个class将要通过 that 实现的方法都可以看到该方法interface。因此,根据总统职位,您应该使用 public 在类中继承这些方法。

访问修饰符的总统如下。public>protected>default(no access modifier)> private.

于 2013-08-20T04:41:25.613 回答
1

默认情况下,接口中声明的方法是public. 这就是编译器抱怨的原因。您不能继承公共方法,然后将其protectedprivate.

是的,你的假设是对的。从接口继承的所有方法都应该公开。

于 2013-08-20T04:33:14.893 回答
1

您不能降低任何方法的可见性。在一个接口中,所有方法都是public默认的,所以你不能让它default access modifier的可见性较低。

于 2013-08-20T04:35:08.170 回答