Java中有没有类似Internal类的东西?
删除访问修饰符与C#中的内部类似。
C#
public class A
{
public static int X;
internal static int Y;
private static int Z;
}
internal class B
{
public static int X;
internal static int Y;
private static int Z;
public class C
{
public static int X;
internal static int Y;
private static int Z;
}
private class D
{
public static int X;
internal static int Y;
private static int Z;
}
}
的Java
public class A
{
public static int X;
static int Y;
private static int Z;
}
class B
{
public static int X;
static int Y;
private static int Z;
public class C
{
public static int X;
static int Y;
private static int Z;
}
private class D
{
public static int X;
static int Y;
private static int Z;
}
}
是。这就是所谓的包私有的,你刚才定义的类不带任何修饰:
package com.blah; class Foo{ }
可以使类包本地。这是一个班级的默认范围。即您没有访问修饰符的地方。
如果你真的想放一些时间,你可以创建一个注释,例如@package_local,我在那些我希望它是本地包的地方执行此操作,而不是将它放在不明确的地方。
是的,默认(包私人)访问级别。只需在类定义中省略任何访问修饰符,即可获得所需的内容。
我不熟悉C#,但在Java中的默认保护的东西是只包中访问:
公共=被任何人访问
私人=仅在当前类
中访问保护的封装内或在从当前类继承
默认=在包装内访问的任何类=访问
我一直认为应该有一种方法来说“可以从任何继承自当前类但不能从其他任何类访问的类,此包或任何其他类”。但没有。
对于你最后的评论,C#有“受保护的内部” – projectshave 2015-09-01 13:47:40
@projectshave nope它的错误。 C#中的“受保护的内部”也可以从您的程序集中访问。实际上是限制一个类的访问权仅限于C#中的其子类使用“protected”。而在java中,“protected”将可以从相同的包加上子类访问。 – 2016-11-06 06:56:28
这个问题有一个公认的答案之前,但我认为答案是不完全清楚一些谁是来自.Net新的Java的人。
Java是否有一些确切的等价物在C#中的内部修饰符?简短的回答是没有(但你可以实现它一些如何,我会告诉)!
C#中的内部实际上是一个“assembly-private”修饰符。什么是装配?
大会是项目的任何产品(在C#DLL或EXE - 相当于Java中可以有一个JAR文件)
没有在Java内部任何完全等效。实际上什么已经由Bryan凯尔回答,并接受为“包私人”(在Java包是等价的在C#中的命名空间),但一些怎么样已经有了答案是得到同样的结果最接近的方式。
可是如何才能让一个完全一样的结果内部?不能java有这个解决方案?答案是肯定的。
它确实有。但没有修饰符。 实际上,做这件事的最好方法是包装中的秘密。包装的最佳实践是按照他们的关系打包你的班级,而不是他们的班级。
我们很多人使用名为“模式”或“主持人”的包和把我们的所有型号,或主持人在其中。虽然这是该死的错误。包应该像Book一样,包含“BookModel.java”,“BookPresenter.java”,.....
这样你可以通过省略修饰符使它们成为package-private,并且没有任何问题,因为你可以访问他们在任何类需要你的包私人类,因为你有一个良好的打包习惯。
http://*.com/questions/2534733/java-protected-classes – pintxo 2011-05-12 16:19:27
@cmmi的可能重复:不是一个真正的重复,因为这个问题是从完全不同的角度问。虽然同样的答案。 – 2011-05-12 16:21:16
请注意,C#没有'packages'-它们有'namespaces'和'assemblies'。包等同于名称空间。但是可以将组件与Java中的JAR文件进行比较。 'internal'修饰符使得一个类只能在程序集中访问。因此它与名称空间或包无关。 – nedR 2014-02-05 14:45:50