Tag: access modifiers

Java访问修饰符的可访问性范围

Java具有私有,受保护和公共访问修饰符。 你能解释一下这些修饰语的可访问性范围吗? 如何访问其他包中的受保护成员?

在C#中,Java的默认(包)访问权限相当于什么?

在C#中,Java的默认(包)访问权限相当于什么? 有吗? 反正是否限制对特定命名空间的访问? 问题: 我试图限制对某些方法的访问仅限于我的NUnit测试 – 在JUnit中我会通过使方法包访问并在同一个包中但在src / test / java而不是src / main / java下进行测试来实现这一点。 如何在C#中实现类似的function? 注意:我不能将方法设置为internal因为我的测试是在一个单独的程序集中 – 就像NUnit约定一样 – 或者是它?

JLS的哪一部分表示匿名类不能拥有public / protected / private成员类

考虑这段代码: public class TopLevelClass { Cloneable c = new Cloneable() { private int privateField; private void privateMethod() {}; }; } 有一个匿名类,它有一个private成员字段和一个private成员方法。 它已成功编译。 然后考虑这个: public class TopLevelClass { Cloneable c = new Cloneable() { private class PrivateInnerClass {} }; } 有一个匿名类,它有一个private成员类。 然而… javac说: error: modifier private not allowed here Eclipse说: Illegal modifier for the local class […]

Java:没有包访问的子类访问

相当新的Java,但我想知道为什么包访问被认为比子类访问“更具限制性”。 也就是说,为子类提供对成员访问权限的每个访问修饰符也为整个包提供访问权限,并且存在提供包访问但不提供子类访问的修饰符。 这不是完全倒退吗? 假设我在某个包中有一个类ControlledInstantiation。 如果我有另一个类AlsoControlledInstantiation扩展ControlledInstantiation,我无法调用ControlledInstantiation的构造函数,除非我将其设置为protected或public。 如果我将其设置为protected,那么包中的任何其他类都可以根据需要经常实例化它。 因此,对于超类(以及语法上的)来说,必须具有可替代性的东西与超类相同或更少的访问权限与提供独特但相关的function的东西相同或更少。 这就像告诉你的孩子他不能玩你的钱包,因为你不会让你的邻居这样做,然后让你的邻居睡在你的房子,因为你的孩子。 所以我想我在问这个决定的动机是什么,我怎么能绕过它呢?

为什么我不能在包外使用受保护的构造函数?

为什么我不能在包之外使用受保护的构造函数来获取这段代码: package code; public class Example{ protected Example(){} … } Check.java package test; public class Check extends Example { void m1() { Example ex=new Example(); //compilation error } } 为什么即使我延长了课程,我也会得到错误? 请解释 编辑: 编译错误: 构造函数Example()不可见

受保护成员的范围

我准备SCJP,我也知道受保护的成员范围在包内以及其他包中,只有inheritance才有可能。 例如:我有三个类作为Parentclass Childclass Friendclass package x.parent; class Parentclass{ protected int x=10; …………… } package x.child; class Childlass extends Parentclass{ super.x=20; …………… } package x.child; import x.parent.Parentclass; class Friendclass{ Parentclass pc = new Parentclass(); pc.x=30; …………… } 这背后的原因是什么,在Friendclass中,成员x不接受为其赋值,在不是Childclass的情况下表现为私有成员。

C#与Java中的访问修饰符最佳实践

我理解OOD中的经验法则是尽量减少对给定对象的所有成员的访问,尽可能合理地完成。 C#和Java似乎都实现了同一组访问修饰符; 然而,令我困惑一段时间的东西现在是为什么Java类似乎主要被声明为公共,而C#类似乎主要被声明为默认。 这些语言是否存在某些微妙之处,这些差异会带来这些差异,还是仅仅是一种惯例或什么? 我发现自己经常通过我的C#代码(我习惯性地将大多数类公开,除了内部类,匿名类,以及其他类别的狭窄范围和有用性)以试图取悦编译器,但是我想知道我是否可能遗漏了某些东西重要。

访问修饰符的目的是什么?

我知道这适用于许多语言,而不仅仅是Java,但这是我最熟悉的语言。 我理解修饰符的作用以及如何使用它们。 我只是想知道,为什么我们需要它们? 为什么不能访问每个对象,无论它是否需要?

java中的内部等价物

什么相当于Java中C#方法中可用的internal访问修饰符? (我知道default即方法,没有任何范围的变量都有package访问权限,但我正在寻找等价的关键字) 我们如何在Java中实现具有protected internal作用域的方法?

受保护的修饰符是什么意思?

我正在阅读“Java编程语言”第3版 。 在第3.5章中,它使用以下单词说明了protected修饰符: 更确切地说,除了可以在类本身内访问以及在同一个包中编码之外,还可以通过对象引用从类访问受保护的成员,该对象引用至少与类的类型相同,类的类型的引用或其中一个亚型。 这两个方面让我感到困惑: 1.受保护的成员可以通过同一个包中的代码访问吗? 之前我所知道的是受保护的成员只能通过子类访问… 2.我不明白a protected member can also be accessed from …意思是,任何人都可以向我解释一下吗?