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

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

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

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java ME

Java ME(Java Platform, Micro Edition)はリソースが制限されたデバイス(携帯電話、PDA、テレビなど)用につくられたJavaプラットフォームである。

Java

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

Q&A

5回答

2617閲覧

thisとsuprについて私の理解が正しいか教えてください

7ppm

総合スコア12

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java ME

Java ME(Java Platform, Micro Edition)はリソースが制限されたデバイス(携帯電話、PDA、テレビなど)用につくられたJavaプラットフォームである。

Java

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

0グッド

0クリップ

投稿2016/01/08 05:44

this.a 同じクラスのフィールドaを呼び出す

super.a スーパークラスのフィールドaを呼び出す

this(aaa) ほかのクラスのString型の引数一つが渡されたコンストラクタを呼び出す。ただこの場合" " は省いていいのでしょうか。

super().a 理解できません、教えてください

Book.a 理解できません、教えてください

super(aaa) スーパークラスのString型の引数一つが渡されたコンストラクタを呼び出す。ただこの場合" " は省いていいのでしょうか。

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

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

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

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

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

guest

回答5

0

  • this.asuper.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
swordone

総合スコア20651

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

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

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

argius

総合スコア9390

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

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

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
sun-solar-arrow

総合スコア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

yona

総合スコア18155

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問