タグ付けされた質問 「access-modifiers」

アクセス修飾子はOOPの概念です。特定のプロパティ/メソッド/クラスが持つアクセスまたは可視性のレベルを決定します。

7
「パッケージプライベート」メンバーアクセスは、デフォルトの(変更なしの)アクセスと同義ではありませんか?
一部のドキュメントで使用されている「パッケージプライベート」という用語と、「デフォルトアクセス」の使用について少し混乱しています。package-privateとdefaultアクセスは両方ともprotectedと同義ではありませんか?


7
プライベートメソッドは本当に安全ですか?
Javaでは、privateアクセス修飾子はクラスの外からは見えないため、安全であると見なされます。それから、外の世界もその方法について知りません。 しかし、Javaリフレクションはこのルールを破るために使用できると思いました。次のケースを検討してください。 public class ProtectedPrivacy{ private String getInfo(){ return "confidential"; } } 次に、別のクラスから情報を取得します。 public class BreakPrivacy{ public static void main(String[] args) throws Exception { ProtectedPrivacy protectedPrivacy = new ProtectedPrivacy(); Method method = protectedPrivacy.getClass().getDeclaredMethod("getInfo", null); method.setAccessible(true); Object result = method.invoke(protectedPrivacy); System.out.println(result.toString()); } } 上記のようなことをするためにはメソッド名を知らなければならないので、現時点では私はまだプライベートメソッドが安全だと思っていました。しかし、他の誰かが作成したプライベートメソッドを含むクラスの場合、それらの可視性はありません。 しかし、コード行の下なので、私のポイントは無効になります。 Method method[] = new ProtectedPrivacy().getClass().getDeclaredMethods(); これにmethod[]は、上記のことを行うために必要なすべてのものが含まれています。私の質問は、Javaリフレクションを使用してこのようなことを回避する方法はありますか? …

2
「内部」保護レベルのため、初期化子にアクセスできません
私はいくつかのプロトコルを持っています LoginStrategy public protocol LoginStrategy { func login(_ viewController: UIViewController) func getUserInfo(withCompletionHandler completionHandler: @escaping (_ userInfo: [String: Any]?) -> ()) func createLoginButton(_ frame: CGRect, withCompletionHandler completionHandler: @escaping (_ loginButton: UIView) -> ()) func getUserId() -> String } および2つのクラス: LoginProvider public class LoginProvider { public let strategy: LoginStrategy public func login(_ …

5
実行されていないJavaの静的ブロック
class Test { public static void main(String arg[]) { System.out.println("**MAIN METHOD"); System.out.println(Mno.VAL); // SOP(9090); System.out.println(Mno.VAL + 100); // SOP(9190); } } class Mno { final static int VAL = 9090; static { System.out.println("**STATIC BLOCK OF Mno\t: " + VAL); } } staticクラスが読み込まれたときにブロックが実行されることを知っています。しかし、この場合、クラス内のインスタンス変数がMnoあるfinalそのため、staticブロックが実行されていません。 どうしてこんなことに?また、を削除した場合final、問題なく動作しますか? static final変数とstaticブロックのどちらが最初に割り当てられますか? finalアクセス修飾子が原因でクラスがロードされない場合、変数はどのようにしてメモリを取得できますか?

1
非パブリックタイプのパブリックエイリアス
有効なC ++かどうか疑問に思います。 class Test { struct PrivateInner { PrivateInner(std::string const &str) { std::cout << str << "\n"; } }; public: using PublicInner = PrivateInner; }; //Test::PrivateInner priv("Hello world"); // Ok, private so we can't use that Test::PublicInner publ("Hello World"); // ?, by using public alias we can access private type, …

1
クラスアクセス修飾子より制限の少ないメンバーアクセス修飾子の使用はどうですか?
たとえば、いくつかのメンバーを持つクラスがあり、メンバーにはクラス自体よりも制限の少ないアクセス修飾子があるとします。 具体的な例は次のとおりです。 package apples; class A { // package private public int foo() { // public (=> less restrictive than *package private*) return 42; } } メンバーアクセス修飾子よりも制限の厳しいクラスアクセス修飾子を理解すると、制限の少ないメンバーアクセス修飾子が上書きされます。したがって、制限の少ないメンバーアクセス修飾子はまったく効果がありません。 私の理解は正しいですか? そうでない場合、結果はどうなりますか? 制限の少ないメンバーアクセス修飾子を使用する正当な理由は何ですか? 最後に、従うべきベストプラクティスは何ですか? 関数の参照を渡し始めると結果に影響が出る可能性があると考えたため、いくつかの実験も行いましたが、それでもアクセス修飾子は重要ではないようです。 私が構築した状況は次のとおりです: apples.Bbla()への参照を返すパブリックメソッドを提供しますapples.A.foo。 次に、をpizzas.C呼び出しapples.B.blaて参照を取得しA.foo、呼び出します。 したがって、にA.foo()は直接表示されませんがC、を介して間接的にのみアクセスできますB.bla() 私はそれをテストしましたが、foo() パッケージのアクセス修飾子をプライベートにするかどうかに関係なく、違いはありません。 package apples; import java.util.function.IntSupplier; public class B { public IntSupplier getReferenceToAFoo() { …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.