質問: 現在javaでオブジェクト指向を勉強しています。 躓いているというほどではないのですが、友達と話している中でpublicとstaticの話になりました。 明確に何が違うのか友達に尋ねられたのですがうまく言語化できませんでした。 public→異なるパッケージからでも呼び出せる static→主にクラスに紐づけられていてクラス全般で使える。 上記の認識で今までやってきました。 どなたかこの二つの違いを分かりやすく説明していただけると助かります。
回答: 直交する概念です。 * **public** クラスやメソッドへのアクセス範囲が制限されないことを意味します。 * **static** クラスをインスタンス化しないでもアクセスできることを意味します。 実験 **dir/ClassB.java** ``` package dir; public class ClassB { public static int a = 97; static int b = 98; public int c = 99; int d = 100; public ClassB() { } ClassB(int dummy) { System.out.println(ClassB.a); System.out.println(this.a); System.out.println(ClassB.b); System.out.println(this.b); //System.out.println(ClassB.c); System.out.println(this.c); //System.out.println(ClassB.d); System.out.println(this.d); } } ``` **ClassA.java** ``` import dir.ClassB; class ClassA { public static void main(String[] args) { System.out.println(ClassB.a); System.out.println(new ClassB().a); //System.out.println(ClassB.b); //System.out.println(new ClassB().b); //System.out.println(ClassB.c); System.out.println(new ClassB().c); //System.out.println(ClassB.d); //System.out.println(new ClassB().d); } } ``` Wandbox コメントを一つでも外すとエラーが出ます。その理由について考えてみると良いでしょう。