現在javaでオブジェクト指向を勉強しています。
躓いているというほどではないのですが、友達と話している中でpublicとstaticの話になりました。
明確に何が違うのか友達に尋ねられたのですがうまく言語化できませんでした。
public→異なるパッケージからでも呼び出せる
static→主にクラスに紐づけられていてクラス全般で使える。
上記の認識で今までやってきました。
どなたかこの二つの違いを分かりやすく説明していただけると助かります。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
直交する概念です。
- public クラスやメソッドへのアクセス範囲が制限されないことを意味します。
- static クラスをインスタンス化しないでもアクセスできることを意味します。
実験
dir/ClassB.java
Java
1package dir; 2 3public class ClassB { 4 public static int a = 97; 5 static int b = 98; 6 public int c = 99; 7 int d = 100; 8 9 public ClassB() { 10 } 11 12 ClassB(int dummy) { 13 System.out.println(ClassB.a); 14 System.out.println(this.a); 15 16 System.out.println(ClassB.b); 17 System.out.println(this.b); 18 19 //System.out.println(ClassB.c); 20 System.out.println(this.c); 21 22 //System.out.println(ClassB.d); 23 System.out.println(this.d); 24 } 25}
ClassA.java
Java
1import dir.ClassB; 2 3class ClassA { 4 public static void main(String[] args) { 5 System.out.println(ClassB.a); 6 System.out.println(new ClassB().a); 7 8 //System.out.println(ClassB.b); 9 //System.out.println(new ClassB().b); 10 11 //System.out.println(ClassB.c); 12 System.out.println(new ClassB().c); 13 14 //System.out.println(ClassB.d); 15 //System.out.println(new ClassB().d); 16 } 17}
コメントを一つでも外すとエラーが出ます。その理由について考えてみると良いでしょう。
投稿2018/11/05 12:36
編集2018/11/05 12:44総合スコア35676
0
public と staticは観点が異なるので、比較するようなものではありません。
例えるなら、理系/文系という観点と、男性/女性という観点を比べて、
「理系と女性の違いを教えて下さい」
と言っているようなものです。
publicに対しては、protected、private、**(デフォルト)**というものがあります。
staticに対しては、キーワードはありませんが、説明するときには「非static」だとか、
場合によっては「インスタンス~」という言い方をします。
例
staticメソッドに対して、インスタンス・メソッドなど
まずは、以上のことを、頭にいれておいていただきたいと思います。
投稿2018/11/05 14:32
総合スコア289
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
ベストアンサー
public→異なるパッケージからでも呼び出せる
static→主にクラスに紐づけられていてクラス全般で使える。
publicは理解できていると思います。
staticの方の理解があやふやなのかなと思いました。
- public アクセス制御の修飾子。どこからでもアクセスできる
- static クラス固有(静的)をあらわす修飾子
static変数は、インスタンスをいくつ作ってもクラスとしては1つなので共有されています。
staticメソッドは、インスタンスを作らなくても利用できるメソッドです
(たぶん、これを”クラス全般で使える”)という風に理解しているのでpublicと混同している?
private static なメソッド、変数も作れるので、異なる概念というのはすぐにわかると思います。
Java
1Hoge nullObj= null; 2nullObj.anyStaticMethod(); // NullPointerは発生しない。 3Hoge.anyStaticMethod(); // 普通、staticメソッドは固有のインスタンスを使わないようにします
投稿2018/11/06 01:42
編集2018/11/06 01:52総合スコア4828
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。