在Java中,有没有关于何时使用每个访问修饰符,即默认明确的规则(包私有)public
,protected
并且private
,同时使class
与interface
和处理继承?
何时以及为什么我应该在类中使用public
,private
和protected
函数和变量?他们之间有什么区别?
例子:
// Public
public $variable;
public function doSomething() {
// ...
}
// Private
private $variable;
private function doSomething() {
// ...
}
// Protected
protected $variable;
protected function doSomething() {
// ...
}
Run Code Online (Sandbox Code Playgroud) 使用标准Ruby Test::Unit
框架对Ruby中的受保护和私有方法进行单元测试的最佳方法是什么?
我敢肯定有人会说道,"你应该只测试公共方法;如果它需要单元测试,它不应该是一个受保护的或私有的方法",但我真的不想讨论这个问题.我有几个方法被保护的或私有的良好和有效的原因,这些私人/受保护的方法是相对复杂的,并且在类的公共方法依赖于这些保护/私有方法正常工作,所以我需要一种方法来测试受保护/私有方法.
还有一件事......我通常将给定类的所有方法放在一个文件中,然后单元在另一个文件中测试该类.理想情况下,我希望将所有"受保护和私有方法的单元测试"功能实现到单元测试文件而不是主要源文件中,以保持主源文件尽可能简单明了.
有没有人有任何想法,为什么在AbstractList(以及在ArrayList中)中的removeRange方法是protected
?它看起来像一个非常明确和有用的操作,但是,使用它,我们仍然被迫继承List实现.
有一些隐藏的理由吗?对我来说似乎很莫名.
我对一些文档使用的术语"包私有"以及"默认访问"的使用感到有些困惑.包私有和默认访问都不是protected的同义词吗?
Ruby(公共,受保护和私有方法)中的方法可见性已经在像这篇博客文章这样的地方得到了很好的解释.但是在Ruby on Rails中,由于框架的设置方式,它似乎与常规Ruby应用程序略有不同.那么,在Rails模型,控制器,帮助器,测试等中,何时/不适合使用受保护或私有方法?
编辑:感谢您的答案到目前为止.我理解Ruby中的protected和private的概念,但我正在寻找更多关于在Rails应用程序的各个部分(模型,控制器,帮助程序,测试)的上下文中使用这些类型的可见性的典型方式的解释.例如,公共控制器方法是操作方法,应用程序控制器中的受保护方法用于需要由多个控制器访问的"辅助方法"等.
为什么有人声明构造函数受到保护?我知道构造函数被声明为私有,目的是不允许在堆栈上创建它们.
我知道这是一个愚蠢的问题,但我仍然怀疑需要清除.
我的问题是,为什么我们不能将课程定义为protected
?
我知道我们不能,但为什么呢?应该有一些具体的原因.
protected ×10
java ×5
private ×4
oop ×3
public ×2
ruby ×2
arraylist ×1
c++ ×1
class ×1
collections ×1
constructor ×1
inheritance ×1
list ×1
php ×1
static ×1
terminology ×1
unit-testing ×1
visibility ×1