当我实施interface
方法时,我被迫将其设为public
方法。
我们可能会遇到default
(如果是在同一个包内访问)或protected
的情况。
有人可以解释这个限制背后的原因吗?
答案 0 :(得分:53)
接口用于定义类型的 public API - 仅限于此,而不是其实现。因此,您在界面中定义的任何方法(或静态成员)都是定义public
。
由于接口不能包含任何具体实现,因此无法从内部调用任何成员方法。并且声明这样的方法但是将它们调用到子类或完全不相关的客户端将意味着你的类型定义是不完整和脆弱的。这就是为什么如果你需要定义受保护或包访问成员,你可以在抽象类(也可能包含实现)中这样做。
答案 1 :(得分:9)
也许this会提供一些答案。
据我所知,您使用interfaces
允许代码外部的人与您的代码进行交互。为此,您需要定义方法public
。
如果您想强制某人覆盖一组给定的私有方法,您可能希望使用一系列抽象保护方法声明一个抽象类。
答案 2 :(得分:1)
接口是一个契约,实现它的类将具有接口中的方法。该接口用于显示该类具有方法的其余程序,并且可以将它们称为
答案 3 :(得分:0)
编辑:此答案适用于C#接口实现。在Java的情况下,场景类似于语法分析器需要在接口中提到的公共关键字,这在C#中隐式完成
接口方法在C#中是隐式公共,因为接口是一个旨在由其他类使用的契约。此外,当实施界面时,您必须声明这些方法是公开的,而不是静态的。
interface IStorable
{
void Read( );
void Write(object obj);
}
请注意IStorable
和Read( )
的{{1}}方法声明不包含访问修饰符(Write( )
,public
..)。实际上,提供访问修饰符会生成编译错误。
protected
只需将接口视为合同即可实现为class Document : IStorable
{
public void Read( )
{
//
}
public void Write(object obj)
{
//
}
}
答案 4 :(得分:-1)
如果我们将接口方法标记为私有,则实现类不会 看到方法并且无法覆盖它。
如果我们将接口方法标记为受保护的实现类 不会看到方法,除非它与 接口
如果我们标记一个没有任何访问修饰符的接口方法,那么 实现类不会看到方法,除非它在同一个中 包作为界面