C# ではinternal
、同じパッケージ内からのみアクセスできるようにクラスをマークできます。Javaに似たものはありますか?
8 に答える
クラスの宣言からセキュリティ修飾子 (public、private) を省略して、パッケージ プライベート クラスを作成できます。
package com.sample;
class MyPackagePrivateClass
{
...
}
アクセス修飾子の削除は、C# の internal と似ています。
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;
}
}
ジャワ
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{ }
私は C# には詳しくありませんが、Java では、デフォルトの保護は、何かがパッケージ内でのみアクセス可能であることです。
public=誰でもアクセス可能
private=現在のクラス内でのみアクセス可能
protected=パッケージ内または現在のクラスから継承する任意のクラス内でアクセス可能
デフォルト=パッケージ内でアクセス可能
私は常に、「現在のクラスを継承するクラスからはアクセス可能であるが、他の場所、このパッケージ、またはその他の場所からはアクセスできない」と言う方法があるべきだと考えてきました。しかし、ありません。
クラス パッケージをローカルにすることができます。これは、クラスのデフォルトのスコープです。つまり、アクセス修飾子がない場所です。
いつか @package_local などのアノテーションを作成できるようにしたい場合は、パッケージローカルにしたい場所でこれを行い、特定されていないままにしませんでした。
はい、デフォルト (パッケージ プライベート) アクセス レベルです。クラス定義でアクセス修飾子を除外するだけで、必要なものが得られます。