• 締切済み

修飾子 public

表題について、今日ふと疑問に思ったことがありますのでどなたか回答お願いいたします。 Javaに限らず、C#等でも修飾子にpublicやprivateがあり参照が制限できるしくみで、当たり前の ように使い分けてきましたが、全て【public】でいいんじゃないかとふと思ってしまいました。 このpublicとprivateの使い分けは、システムが大きくなった場合に参照できるメソッド数が 増えてわかりにくくならないように分けているだけなのでしょうか?? 逆に小さなシステムで自分で把握していれば全てpublicでもよいのでしょうか?? 現在の僕の手法ではとりあえずprivateで宣言して、publicに使いたくなったらpublicに昇格する ような決め方をしています。こんな決め方でよいでしょうか?? へんな質問ばっかりで申し訳ございません。 今後の参考のためにみなさんの意見をお聞かせください。

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

「オブジェクト指向」について、これまでに勉強したことはありますか? どの程度理解していますか? ある程度勉強していれば、どんな目的でprivateやpublic等が用意されているか、わかると思うのですが...

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • アクセス修飾子

    アクセス修飾子 が理解できません。 ヘルプやインターネットで調べると下記のようにかかれています。 public 『アクセスの制限はありません。 』 protected 『アクセスは、コンテナ クラス、またはコンテナ クラスから派生した型に制限されます。 』 internal 『アクセスは現在のプロジェクトに制限されます。 』 protected internal 『アクセスは、現在のプロジェクト、またはコンテナ クラスから派生した型に制限されます。 』 private 『アクセスはコンテナ型に制限されます。』 public 、private は理解できるのですが、protected 、internal が理解できません。 Javaだとprotectedは同じパッケージ内、サブクラスでアクセス可能とかかれています。 .NETも同じでしょうか? 同じパッケージ内?ってどういうこと?となっています。 1つのオブジェクト内に2つのクラスを作成し、 クラスAのメソッドに protectedで作成し 、クラスBでクラスAの宣言をしたらAのprotectedのメソッドは使用できません。どういう場合にprotectedのメソッドは使用できるのでしょうか?

  • eclipseについて

    いつもお世話になっております。 eclipseを使って開発をしているのですが 最近困った現象に襲われています。 (Ver2.???です) javaソース内に複数のメソッド (publicやprivateやprotectedのメソッド) を記述しています。 例えば、とあるpublicのメソッド内で privateのメソッドを呼んでいるとします。 public内のprivateのメソッド名のところで 「F3」もしくは「宣言を開く」を選ぶと 該当する(private)メソッドしかjavaエディタに 表示されなくなってしまいました。 普通であればただ単にそのメソッドに飛んでjavaファイル内の ソース自体はすべて表示されていますよね? (初心者)なので設定をいじりすぎたのが原因かとは思われますが 何を変更したためにこのような現象になったのかわかりません。 開発の効率が落ちて非常に困っております。 どうかみなさまの知識を教えてもらえませんか。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • インナークラスについて

    JAVAについて友人に質問されたのですが、 わかりやすく解説をすることが出来ませんでした。 よろしくお願い致します。 ----------------------------------------------- インナークラスについてですが、 ローカルクラスの修飾子はabstractと finalのみ可なのは、どういった理由からですか? それと、ローカルクラスと匿名クラスは、 そのクラスを宣言しているメソッドの final変数のみ参照が可能というのは どういった理屈でfinalのみなのでしょうか?

    • ベストアンサー
    • Java
  • 言語[C#]..特定のメソッドをオーバーライドさせないようにする。

    特定のメソッドをオーバーライドさせたくありません。Javaでは、final修飾子をつければ実現可能と思いますが、C#の場合にはどのような宣言にするとよいのでしょうか。 例[Java] public final void NotAllowOverride(){}

  • staticなフィールドをstaticじゃないメソッドで使うには?

    いつもお世話になっています。よろしくお願いします。 javaで、staticなメインメソッドからも、staticじゃないメソッドからも1つの メンバ変数(フィールド)を処理したいと思います。 private static String nr; というフィールドを宣言しました。 (staticであるmainメソッドの中で使えるようにstaticで宣言しようと思いました。) 次に、 private void Kensaku() { このstaticではないメソッドの中でString nrを使って処理を行いたいです。 } 初歩の初歩なことを質問してすみませんが、調べても分かりませんでした。 どうか、よろしくお願いします。

    • ベストアンサー
    • Java
  • final修飾子

    Javaでfinal修飾子があると学びました. ・メソッドはオーバーライドできない ・変数は値の変更ができない ・クラスは継承できない この3点を実現することが可能ですよね? #間違っている・他にもあるなら教えてください. 私はfinalを引数につけてみました. public class Test {   public static void main(String[] args) {      char[] s = {'s','a','t','o'};      System.out.println(s);      modify(s);      // finalのはずが変更されている      System.out.println(s);      Integer i = 3;      Integer j = 6;      swap(i, j);      System.out.println(i + ":" + j);      Foo f1, f2;      f1 = new Foo();      f2 = new Foo();      f1.i = 3;      f2.i = 6;      swap(f1, f2);      System.out.println(f1.i + ":" + f2.i);    }    static void modify(final char[] s) {      s[0] = 'k';    }    static void swap(Integer i, Integer j) {      Integer temp;      temp = i;      i = j;      j = temp;    }    static void swap(Foo f1, Foo f2) {      int temp;      temp = f1.i;      f1.i = f2.i;      f2.i = temp;    } } class Foo {    int i; } modify関数でfinal修飾子をつけるとsatoがkatoにならないと予想していました. ですが,実際にはコンパイルエラーにもならずsato→katoになりました. final修飾子はC言語でいうところのchar * const c;でしょうか? #ポインタの値は変更できないが,参照先の値は変更できるということですか? あと,swap関数についても質問があります. そもそもポインタがないので,基本型を実引数に与えるときはコピーされ, 参照型はコピーされないですよね? なので,swap関数を2つ用意してみました. Fooクラスのswap関数,Integerクラスのswap関数の2つです. Fooクラスがうまく交換でき,Integerクラスが交換できない理由がわかりません. #Integer temp;を使って参照値を交換していると思うのですが,違うのでしょうか?

    • ベストアンサー
    • Java
  • Java 静的メソッドとインスタンスメソッド

    静的メソッドとインスタンスメソッドの使い分けがよくわかりません。 私の認識は 静的メソッド:インスタンスメンバ変数を参照する必要がない処理 インスタンスメソッド:インスタンスメンバ変数を参照して行う処理 と思っています。 よって、例えばDAOを作成する場合、select、update、insertを実行するメソッドを作成しますが、これらはクラスのインスタンスメンバ変数を参照する必要がないので静的メソッドにするべきだと思っています。 しかし、本やネットのDAOのサンプルプログラムはインスタンスメソッドで作成されています。 これらは、private static String の変数(SQL文が記述されている)を参照していますが、インスタンスメンバ変数は参照していません。 なぜselect、update、insertのメソッドをインスタンスメソッドにする必要があるのかわかりません。 静的メソッドとインスタンスメソッドの使い分けの基準を教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Java
  • メソッド宣言の戻り値の型にクラス名を使うには?

    メソッドの戻り値の型にクラス名を使ってるプログラムを見かけたのですが、例えばクラス名を public class Player{ とします。そして Playerクラスのメソッド宣言に  private   Player(戻り値の型) startRun(メソッド名) { とあります。 これは戻り値の型にクラス型の変数を使ってユーザー定義してると思うのですが使い方が分かりません。 javaのサイトはできるだけ調べたのですが戻り値の型にクラス名を使うにはどうすればいいか分かりませんでした。 この使い方を教えてくれるサイトを教えてください。 基本型と参照型のStringクラスについて教えてくれるサイトはたくさん見かけたのですが…。 お願いします。

    • ベストアンサー
    • Java
  • Javaの問題がわからない

    Javaで疑問があります。 この問題でなぜ、すべてのメソッド宣言にthrowsをつけなくてはいけないのかが理解ができないです。

    • ベストアンサー
    • Java
  • アクセス修飾子の指定相手と、そのスコープとの関係性。

    アクセス修飾子の指定相手と、そのスコープとの関係性。 Java初心者であるため、変なことを言うかもしれませんが、宜しくお願い致します。 クラスや、メンバにアクセス修飾子は付けられますが、 その修飾のしかたの組み合わせによって、 アクセスできるスコープが色々と場合分けされると思うのですが、 このあたりは、どう考えたら良いのでしょうか? 例えば、 //(1) public class MyClass1 {  private int n1; } //↑クラス自体は、どこからでも使用可能だが、 //フィールドn1はMyClass1内部からのみ使用可能。 //(2) private class MyClass2{  public int n2; } //↑ん~、なんだこりゃ~??(こんな書き方はない??) //------------------------------ //(3) public interface MyInterface{  int n3 = 3; } //↑インターフェース自体も、そのフィールド(定数)n3も、どこからでも使用可能! //(4) interface MyInterface{  int n4 = 4; } //↑インターフェース自体も、そのフィールド(定数)n4も、 //同じパッケージ内からのみ使用可能! //(5) abstract interface MyInterface{  int n5 = 5;  void mymethod();  //自動的にpublic abstract指定になるのですよね…?  abstract mymethod2();  //publicだけ、自動指定される扱い、といった感じで…。 } //↑なんじゃこりゃー!わかりませんっ! //もし仮に、このインターフェースにメソッドを書かないとエラーが出ます? //というか、インターフェースにabstractキーワードを指定できる意味がよく分かりません。 //------------------------------ (1)~(2)がクラス編、(3)~(5)がインターフェース編。 特に(2)、(5)について、どなたかアドバイスして下さい。

    • ベストアンサー
    • Java