public修飾子とインスタンス化の理由

このQ&Aのポイント
  • public修飾子をクラスにつける理由は、他のパッケージからのアクセスを可能にするためです。
  • さらに、修飾子をつけない場合は同一パッケージ内からしかアクセスできない制限があります。
  • しかし、Test.javaとBase.javaが同じディレクトリにあるため、public修飾子をつけていないクラスでもインスタンス化が可能になっています。
回答を見る
  • ベストアンサー

publicクラス

クラスの修飾子にpublicをつける理由を教えて下さい。 さらに、なにも修飾子をつけなときは 同一パッケージ(ファイル)内からでしかアクセスできないはずですよね? Test.javaとBase.javaを以下のように定義します。 class Test { public static void main(String[] args) { Base b = new Base(); } } class Base { public void show() { System.out.println("hello!"); } } この2つのファイルは同じディレクトリにあります。 public修飾子をつけていないにも関わらず、なぜインスタンス化ができるのでしょうか? よろしくおねがいします。

  • Java
  • 回答数1
  • ありがとう数10

質問者が選んだベストアンサー

  • ベストアンサー
  • picknic
  • ベストアンサー率25% (33/132)
回答No.1

同じ「デフォルトパッケージ」に存在するから。

関連するQ&A

  • クラスの参照(同じファイル内 vs 別々のファイルの場合)

    二つの.javaファイルがあります。 <ABC.java> class ABC { public static void main(String args[]) { A obj = new A(); obj.hello(); } } --------------------------------------------- <A.java> class A{ void hello() { System.out.println("Hello from A"); } } --------------------------------------------- ABC.javaファイルでコンパイルすると、「 シンボルを解釈処理できません。」というエラーメッセージが出ます。でも、ABC.javaファイルの中に、class Aを続けて書くとコンパイルできます。なぜ、別々のファイルにすると参照できないのでしょうか? (おなじフォルダ内に入れています) 教えてください。よろしくお願いします。

    • ベストアンサー
    • Java
  • mainクラスのpublicの意味を教えて下さい

     お早う御座います、JAVA初心者です、宜しくお願いします。  main クラスの public をコメントアウトしてもエラーもなく走ります。  これは、「public static void main(String[] args)」を持っているクラスを自動的に「main クラス」と判断しているということでしょうか。 ============================================================ class Sub { void disp() { System.out.println(" a "); } } /*public*/ class Main { public static void main(String[] args) { Sub s = new Sub(); s.disp(); } }

    • ベストアンサー
    • Java
  • ResourceBundleクラスの使い方

    ResourceBundleクラスを使用してプロパティファイルに定義した値を取得しようと したのですがうまくいかなくて困っています。 java.util.MissingResourceException: Can't find bundle for base name resources, locale ja_JP と表示されてしまいます。 どなたか原因はお分かりになりますでしょうか javaファイル、プロパティファイルは以下のようになっています。 クラスパスは以下のように設定しておりプロパティファイルはカレントディレクトリ及びCドライブ 直下に置いています。 CLASSPATH=.;C:\ 【PropertyTest.java】 public class PropertyTest {   public static void main(String[] args) {     ResourceBundle source = ResourceBundle.getBundle("resources");     System.out.println(source.getString("hello.world"));   } } 【resources_ja_JP.properties】 hello.world=Hello, World!

    • ベストアンサー
    • Java
  • クラス名はどうするのですか?

    package ex7; public class Sample { public final static int VALUE = 100; } package ex7; import static ex7.Sample.VALUE; public class Main { private final static int VALUE = 0; public static void main(String[] args) { System.out.println(VALUE); } } 上記のプログラムのクラス名は何をつければいいですか・・・? 同じくプログラム名は何と付ければいいですか・・・? ご多忙中恐れいります・・・。 ご回答の程宜しくお願い申し上げます。 回答者 これが、素人さんには分かりにくいんですね。 mkdir ex7 で、ex7 というディレクトリを作製して、 その中に、 Sample.java を public class Sample { public final static int VALUE = 100; } で、 Main.java を package ex7; import static ex7.Sample.VALUE; public class Main { private final static int VALUE = 0; public static void main(String[] args) { System.out.println(VALUE); } } で作製して、 ex7 の中から出て、 javac ex7/Sample.java javac ex7/Main.java でコンパイルします。 質問者 度々すいません・・・。 ファイル名は何にすればいいですか・・・? ご回答がなかなか来ません。

    • ベストアンサー
    • Java
  • 内部クラスのインスタンスを動的に取得したい

    class test {   public test(String str){     try{       Class c = Class.forName("test$TESTSUB" + str);       c.newInstance();  // ココでエラー     }catch(Exception e){       e.printStackTrace();     }   }   public static void main(String[] args){     new test(args[0]);   }   class TESTSUB1 {     public TESTSUB1(){       System.out.println("# " + toString());     }   }   class TESTSUB2 {     public TESTSUB2(){       System.out.println("# " + toString());     }   } } 上記のようなコードにより、内部クラスのインスタンスを 動的に得たいと思っていますが、エラーとなってしまいます。 エラー回避方法、または他にいい方法がありましたら、 ご教示のほどよろしくお願いいたします。

    • ベストアンサー
    • Java
  • javaでメインクラスが見つからないエラーが出てしまいます。

    javaでメインクラスが見つからないエラーが出てしまいます。 やさしい簡単なプログラム class test { public static void main(String[] args) { System.out.println("Viva!"); } } をjavacでクラスファイルを作った後に(ここまではできます)java test.class を行うと could not find the main class というエラーが出てしまいます。 教科書の通りにjdkをインストールして、パスを環境変数に通して、コマンドプロンプトでコンパイルしかしていません。 なにが悪いんでしょうか?

    • ベストアンサー
    • Java
  • java

    コンパイルできても、実行ができません。 次のようなエラーがでます。 このエラーはどのようなエラーなのでしょうか? Exception in thread "main" java.lang.NoClassDefFoundError: test コードはただたんにHello JAVA と表示させるだけです。 class Test{ public static void main(String args[]){ System.out.println("Hello Java\n"); } }

    • ベストアンサー
    • Java
  • javaの基本的な質問

    下記を実行すると、上から順番にメソッドが実行され、 「Hello Java  Hello Java」 と表示されるような気がしてしまうのですが… なぜ、一度しか表示されないのでしょうか。 class Main { public static void main(String[] args) { hello(); } public static void hello() { System.out.println("Hello Java"); } }

    • ベストアンサー
    • Java
  • クラス名

    JAVAの初心者です。 今実行しているクラスのクラス名を求めたいのですが うまくいかず困っております。 public class Person {   public static void main(String args[]);   {     String classname;     classname = this.class.getClass().getName();     System.out.println(classname);   } } イメージ的にはこんな感じなのかなと思ってやってみたのですが、 どうやら違うみたいです。どうぞご教授よろしくおねがいします。

    • ベストアンサー
    • Java
  • 超初心者です。教えてください。

    初心者です。javaのマニュアル書に書いてある class Hello{ public static void main (String[] args){ System.out.println("Hi! Hello!!"); } }   はコンパイルすることができたのですが、実行すると Exception in thread "main"java.lang.NoClassDefFoundError: Hello という文書が出てきますどうすればいいのでしょうか。教えてください。

    • ベストアンサー
    • Java

専門家に質問してみよう