this.a 同じクラスのフィールドaを呼び出す
super.a スーパークラスのフィールドaを呼び出す
this(aaa) ほかのクラスのString型の引数一つが渡されたコンストラクタを呼び出す。ただこの場合" " は省いていいのでしょうか。
super().a 理解できません、教えてください
Book.a 理解できません、教えてください
super(aaa) スーパークラスのString型の引数一つが渡されたコンストラクタを呼び出す。ただこの場合" " は省いていいのでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答5件
0
this.a
とsuper.a
staticでないメソッドはそのクラスのインスタンスを対象に起動します。
その「対象となったインスタンス」が持つフィールドを参照します。
this.a
は「対象のインスタンスの、このクラス(これが記述されている)に属するフィールドaを、
super.a
は「対象のインスタンスの、(直系)スーパークラスに属するフィールドaを参照します。
this(aaa)
とsuper(aaa)
コンストラクタ起動の記法です。
this(aaa)
は、あるコンストラクタの処理の最初に、オーバーロードされた別のコンストラクタを起動することで初期化処理を統一する手法です。
super(aaa)
も、コンストラクタの処理の最初に起動することは共通ですが、対象がスーパークラスのコンストラクタになります。
いずれも、"aaa"
と書くと「aaa」という文字列を渡すことになりますが、aaa
と書くと、この名前の変数に格納されている値を渡すことになります。
Book.a
(Bookがクラス名だと仮定して)Bookのstaticフィールドaにアクセスします。
staticフィールドはインスタンスに紐付かない、そのクラスで共通の情報を持ちます。
インスタンスに紐付かないのでインスタンスを対象とせず、クラス名から記述します。
super().a
こんな書き方は存在しません。
投稿2016/01/08 16:13
編集2016/01/11 14:38総合スコア20675
0
いちおう推測はできますが、どのようなソースコードに対してそういっているのかが書いてないと曖昧にしか答えられないと思います。
下に書いたようなコードがある前提で。
this.a 同じクラスのフィールドaを呼び出す
クラスというより、インスタンスフィールドa
といった方が正しいかと。
super.a スーパークラスのフィールドaを呼び出す
同じく、スーパークラスのインスタンスフィールドa
。
this(aaa) ほかのクラスのString型の引数一つが渡されたコンストラクタを呼び出す。ただこの場合" " は省いていいのでしょうか。
" "
を省くと、文字列リテラルではなくaaa
という変数やフィールドを指すことになります。
super().a 理解できません、教えてください
正しい構文ではありません。
Book.a 理解できません、教えてください
Book
クラスのクラスフィールドa
です。
下記コードではインスタンスフィールドと重複するので、aa
としています。
super(aaa) スーパークラスのString型の引数一つが渡されたコンストラクタを呼び出す。ただこの場合" " は省いていいのでしょうか。
this(aaa)
の場合と同じです。
...
- コード例:
lang
1package local; 2 3public final class App { 4 5 public static void main(String[] args) { 6 Book.aa = "Bookのクラスフィールド"; 7 Textbook.aa = "Textbookのクラスフィールド"; 8 9 Book book = new Book("本"); 10 Textbook textbook = new Textbook("教科書"); 11 12 book.show(); 13 textbook.show(); 14 } 15 16} 17 18class Book { 19 20 String a; // Bookのインスタンスフィールド 21 static String aa; // Bookのクラスフィールド 22 23 Book() { 24 } 25 26 Book(String title) { 27 this.a = title; 28 } 29 30 void show() { 31 System.out.println("Book.show()"); 32 System.out.println("Book.aa = " + Book.aa); 33 System.out.println("this.a = " + this.a); 34 } 35 36} 37 38class Textbook extends Book { 39 40 String a; // TextBookのインスタンスフィールド 41 static String aa; // TextBookのクラスフィールド 42 43 Textbook(String title) { 44 super("super:" + title); 45 this.a = title; 46 } 47 48 void show() { 49 System.out.println("Textbook.show()"); 50 System.out.println("Textbook.aa = " + Textbook.aa); 51 System.out.println("this.a = " + this.a); 52 System.out.println("super.a = " + super.a); 53 } 54 55}
- 実行結果
Book.show() Book.aa = Bookのクラスフィールド this.a = 本 Textbook.show() Textbook.aa = Textbookのクラスフィールド this.a = 教科書 super.a = super:教科書
投稿2016/01/08 07:37
総合スコア9396
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
##正解のもの
- this.a:自分のクラスのフィールドaを呼び出す。
- super.a:スーパークラスのフィールドaを呼び出す
これは正解です。
##違う物
- this(aaa) :自分のクラスの他のコンストラクタを呼び出す。
###例えば…
Java
1public class Test{ 2 //一部省略… 3 public Test(){ 4 String aaa="テスト"; 5 this(aaa); 6 //引数がStringのコンストラクタを呼び出す 7 } 8 public Test(String a){ 9 this(100,a); 10 //引数がint,Stringのコンストラクタを呼び出す 11 } 12 public Test(int b,String a){ 13 this.a=a;this.b=b; 14 } 15}
ただ、""を省いてよいかと言ったらそもそもどのようなソースコードか分からないので分かりません。String型ならダメです。
もしもaaaの場合、フィールドもしくはローカル変数になります。フィールドもしくはローカル変数にaaaが存在するなら"を省いてください。
後述のsuper(aaa) も同じ。
- super().a:そんな構文ありません。
- Book.a :Bookクラスのフィールドa(staticフィールド)を呼び出す。
###例
public class Test2{ public static void main(String[] args){ Book.a=100; } } class Book{ static int a; }
- super(aaa):スーパークラスのコンストラクタを呼び出す。
###例
public class Human { public Human(String aaa){ } } class Engineer extends Human{ public Engineer(String aaa){ super(aaa); } }
大体はthis()と同じだがスーパークラスのコンストラクタを呼び出す点が違う。
this()とかsuper()で、String型のコンストラクタを呼び出すと書かれていましたが、String型とは限りません。
投稿2016/05/22 00:32
編集2016/05/22 00:34総合スコア113
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
引数にString型を与える場合、String型の変数であればその変数名だけでいいのですが、文字列そのものを与える場合は "" でくくらないとだめですね。じゃないと文字列と認識されないので。
Book.a はBookクラスのフィールドaを示しているのでは?
投稿2016/01/08 07:04

退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
・this.a クラス内のフィールドaを呼び出す
・super.a スーパークラスのフィールドaを呼び出す。
・this(aaa):クラス内のシグネチャが一致するコンストラクタを呼び出す。省略云々は意味がわからないので回答できません。
・super().a:存在しないと思います。
・Book.a:理解できません、教えてください。
super(aaa) スーパークラスのString型の引数一つが渡されたコンストラクタを呼び出す。ただこの場合" " は省いていいのでしょうか。
投稿2016/01/08 06:36
総合スコア18157
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。