質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

3682閲覧

java:異なるパッケージのクラスの変数を、異なるパッケージのクラスで使用する方法

karakorum

総合スコア20

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/02/26 10:46

*プログラム初心者のため、表現等に誤りがあるかもしれません。すいません。

前提・実現したいこと

環境:java version 13.0.2
OS : windows10
テキストエディタはAtomで、コンパイル、実行等もAtomで行っています。

●やりたいこと
異なるパッケージにあるクラスで定義した変数を、別のパッケージのクラスで使いたいです。
ただ、エラー内容から推測するに、そもそもjavaの機能的にできないことのようにも感じます。
仮に、機能的にできるのであれば、エラーの原因を教えていただきたいです。

該当のソースコード

①Mainのクラスです。
ディレクトリ:./packageA/Main.java

package packageA; public class Main{ public static void main(String[] args){ packageA.SampleA a=new packageA.SampleA(); packageB.SampleB b=new packageB.SampleB(); packageB.SampleC c=new packageB.SampleC(); c.test(); a.test(); //b.Call(c); b.Call(a); } }

②①と同じパッケージにあるファイルです。
ディレクトリ:./packageA/SampleA.java

package packageA; public class SampleA{ int number; public void test(){ number=10; System.out.println("SampleAの"+number); } }

③ ①②とは異なるパッケージのファイルです。このファイルで②の変数を利用しようとしています。
ディレクトリ:./packageB/SampleB.java

package packageB; public class SampleB{ //public void Call(packageB.SampleC b){ public void Call(packageA.SampleA b){ System.out.println("SampleBの"+b.number); } }

④③と同じパッケージのファイルです。ソースコードは②とほぼ同じです。パッケージだけが異なります。
ディレクトリ:./packageB/SampleC.java

package packageB; public class SampleC{ int number; public void test(){ number=20; System.out.println("SampleCの"+number); } }

上記①~④をコンパイルすると、以下のようなエラーメッセージが出ます。

javac .\packageA\Main.java .\packageA\SampleA.java .\packageB\SampleB.java .\packageB\SampleC.java エラーメッセージ \packageB\SampleB.java:7: エラー: SampleAのnumberはpublicではありません。パッケージ外からはアクセスできません System.out.println("SampleB縺ョ"+b.number); ^ エラー1個

試したこと

本来は、別のファイルで作業をしているのですが、無駄を省いた簡易版を作成しました。
ネットや本で色々と調べ、試してみましたが、中々上手くいきません。
同一パッケージでの変数は使うことができました。(上記②と④のコメントアウトを外して実行)。原因が異なるパッケージの間の変数を利用していることだと分かってはいるのですが、解決しません。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/02/26 11:02

アクセス(レベル)修飾子を学んでください
karakorum

2020/02/26 11:06

調べたらすぐに分かりました。 勉強不足でした。 ありがとうございます。
guest

回答1

0

ベストアンサー

パッケージ外からアクセスするときは変数にpublic修飾子を付けたらよいのではないでしょうか。

Java

1package packageA; 2 3public class SampleA{ 4 // public 修飾子を付けてみたらいかがでしょうか。 5 public int number; 6 7public void test(){ 8 number=10; 9 System.out.println("SampleAの"+number); 10 11} 12}

投稿2020/02/26 10:54

quadii.shii

総合スコア257

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

karakorum

2020/02/26 11:07

すんなりとコンパイルが通りました。 ありがとうございました。 基本が全然できていなかったんですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問