Tag: access modifiers

在Java中更改重写方法的访问修饰符?

有没有理由可以更改被覆盖方法的访问修饰符? 例如, abstract class Foo{ void start(){…} } 然后将package-private访问修饰符更改为public , final class Bar extends Foo{ @Override public void start(){…} } 我只是出于好奇而问这个问题。

当我们有访问器和mutator时,为什么要声明私有字段?

如果我用Java创建一个类,我总是被告知惯例是使一个类的所有字段都是私有的。 如果我需要访问或更改它们,我可以创建一个访问器和mutator方法。 我确实理解私有变量的重要性,因为它们有助于降低复杂性并允许封装。 我不明白的是,如果我创建一个公共访问器和mutator方法,那个时候变量public是不是? 为什么在任何人都可以访问私有变量的情况下仍然使用私有变量? 我还应该注意,我理解这些方法的重要性,但我想知道为什么我们懒得将变量设为私有, 即使我们通过这些方法让任何人都可以访问它?

php中的访问修饰符有什么区别?

我完全混淆了php中的访问修饰符。 关于访问修饰符的内存利用率或仅可访问性的差异是否有任何区别。请建议。 如果我有以下代码: public Class Employee { public $emp_name=’xyz’; protected $emp_phone=’1234567891′; private $emp_code=’101′; public function getName($name) { return ‘Employee name is :’ . $name; } protected function getPhone($ph) { return ‘Employee contact number is :’ . $ph; } private function getCode($id) { return ‘Employee code is :’ . $id; } $emp = new Employee(); $emp->getName($emp_name); […]

有引用时可以访问Java私有字段吗?

我今天遇到了以下“奇怪”function – 如果您在A类主体中引用了A类中的对象,则可以访问该对象的私有字段 – 即: public class Foo{ private int bar; private Foo foo; public void f() { if(foo.bar == bar) // foo.bar is visible here?! { // } } } 有人对此有一个很好的解释吗?

包装和知名度

我正在制作SDK,我正在尝试将类分离到不同的包,这些类使用其他一些共享类。 问题是如果我公开共享类,每个人都能看到它们,而不仅仅是我的类。 什么是使它们只能由我的应用程序访问的正确方法? 示例: 打包MyClass1 包装b MyClass2 包c公共MySharedClass 因为c是公共的MySharedClass将能够访问它,但问题是它也将对世界可见,我怎么能阻止它呢?

从java.lang.Object访问clone()

这是我无法理解的东西。 在java.lang.Object , clone()是使用protected modifier定义的。 根据定义,它可以通过名称在其自己的类定义中访问,通过名称在从它派生的任何类中,并通过名称在同一个包中的任何类的定义中。 这里的Sample类在另一个包中,显然它不能从Object类访问clone() 。 但是,当Sample从Object隐式派生时,为什么它无法访问它? 该定义并未说明它满足两个条件(在同一个包内,也是一个子类)。 public class Sample { public Object foo() throws CloneNotSupportedException { … return someObject.clone(); } }

Java中的受保护的访问修饰符

我在理解java中的受保护访问修饰符(或其背后的设计)时遇到了一些麻烦。 我认为这意味着包访问和访问通过inheritance包含抽象成员的类的对象。 我写了以下示例代码。 我看到如果取消注释,注释掉的行会产生编译错误。 为什么我可以通过Second中的Second对象访问pro,但不能通过Second中的First对象访问pro? package first; public class First { protected void pro(){ System.out.println(“Can see protected method”); } } package first; public class InFirst { public static void main(String[] args){ First fst = new First(); fst.pro(); } } package second; import first.First; public class Second extends First { public static void main(String[] args){ First […]

非静态方法可以修改静态变量

我想知道非静态方法如何修改静态实例变量。 我知道静态方法只能访问其他静态方法和静态变量。 但是,另一方是真的吗? 非静态方法可以只访问非静态变量吗? 例如: public class SampleClass { private static int currentCount = 0; public SampleClass() { currentCount++; } public void increaseCount() { currentCount++; } } 这段代码编译,我想知道为什么在静态访问权限方面。

Java中的public,protected,package-private和private有什么区别?

在Java中,是否有明确的规则来确定何时使用每个访问修饰符,即默认(包私有), public , protected和private ,同时创建class和interface以及处理inheritance?