我可以将Java接口方法实现为私有方法还是受保护方法



是否可以实现一个接口,然后在重写方法时,将方法设为privateprotected

默认情况下,接口方法是公共的(即使您没有明确指定(。因此,任何实现接口方法的方法也必须是public,因为不能降低该方法的可见性。

原因:

假设您有一个接口:

public interface SomeInterface {
public int someMethod();
}

现在您实现了接口:

public class SomeClass implements SomeInterface {
public int someMethod() {
return 1;
}
}

您可以按如下方式使用它:

SomeInterface inter = new SomeClass();
int result = inter.someMethod();

现在,如果您在实现类中将someMethod()的访问级别更改为protectedprivate,它将不再可以从外部类访问(例如,in将无法从属于不同包且未扩展SomeClass的类访问(。但是,由于SomeClass实现了SomeInterface,并且接口的方法是public,所以它必须是可访问的。

不可以,因为有一些规则(这里提到了更多细节(:

在java中,一个方法只能写在子类中,不能写在同一个类中。

参数列表应与重写的参数列表完全相同方法

返回类型应与返回类型相同或为其子类型在超类的原始重写方法中声明。

访问级别的限制不能超过重写的方法的访问级别。例如:如果superclass方法是声明为public,则子类中的overridding方法不能要么是私人的,要么是受保护的。

只有当实例方法由子类。

不能重写声明为final的方法。

声明为static的方法不能被重写,但可以重新声明。

如果一个方法不能被继承,那么它就不能被重写。

与实例的超类在同一个包中的子类可以重写任何未声明为private或final的超类方法。

不同包中的子类只能覆盖非final方法被声明为公共的或受保护的。

重写方法可以抛出任何未选中的异常,而不管重写的方法是否引发异常。

但是,重写方法不应抛出检查异常是新的或比重写方法声明的范围更广。重写方法可以抛出比重写的方法。

构造函数不能被重写。

最新更新