スーパークラスの取得方法

このQ&Aのポイント
  • スーパークラスの取得方法についての質問です。具体的には、抽象クラスを作って表示をさせる実験をしていますが、取得したnameを参照することができません。どのようにすれば、名前を出すことができるのでしょうか。
  • 現在、抽象クラスを用いて表示を行う実験をしていますが、取得したnameを参照することができません。どのようにすれば、名前を表示することができるのでしょうか。
  • スーパークラスの取得方法についての質問です。抽象クラスを使用して表示を行う実験をしているのですが、取得したnameを参照することができません。どのようにすれば、名前を出力することができるのでしょうか。
回答を見る
  • ベストアンサー

スーパークラスの取得の仕方

どなたかお知恵を貸してください。 現在抽象クラスを作って表示をさせる実験をしています。 ですが、下記ソースでは、取得したnameをが参照することができません。 どのようにすれば、たまの名前を出すことが出来るのでしょうか よろしくお願いいたします。 abstract class Mammals { /** 名前を表す */ String name; abstract public void introduceOneself(); public void setName(String name) { name = name; } } class Cat extends Mammals { public Cat() { super(); } public void introduceOneself() { System.out.println(name+"です。うにゃにゃ。"); } } class Main { public static void main (String[] args) { Cat tama = new Cat(); //コンストラクタ呼び出し Mammals neko = tama; //コンストラクタ呼び出し neko.setName("たま"); //自己紹介する tama.introduceOneself(); //自己紹介する } }

noname#62744
noname#62744
  • Java
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • gonic
  • ベストアンサー率30% (18/59)
回答No.2

#1 現状では引数の方のnameをいじるだけになってしまってます。 メンバ変数を使うときはthis.nameとして区別する必要があります。

その他の回答 (1)

  • gonic
  • ベストアンサー率30% (18/59)
回答No.1

setName内の name = name; を this.name = name; にする。

noname#62744
質問者

お礼

gonicさん ありがとうございました! 無事動きました。 thisキーワードを使うとは・・・ 6時間も悩んでしまいました>< ありがとうございました!

関連するQ&A

  • vectorに格納されたオブジェクトの廃棄

    次のようなテストプログラムを作ってみました。 OSはVineです。 #include <iostream> #include <string> #include <vector> using namespace std; class Neko{ string name; public: Neko(){} Neko(string n):name(n){} void SetName(string n){name=n;} void Naku() const; }; void Neko::Naku() const{ cout << "名前は" << name << endl; } int main(){ int i; int num; string temp; vector <Neko> x; for(i=0;i<num;i++){ Neko *y=new Neko; x.push_back(*y); } for(i=0;i<num;i++){ cout << "名前を入力" << endl; cin >> temp; x[i].SetName(temp); } for(i=0;i<num;i++)x[i].Naku(); delete [] x;・・・※ } 廃棄(※のところ)するとき、これでは コンパイルエラーになってしまいます。 for文で回しても同じです。 どのように書けばよいのでしょうか? vectorにはポインタではなくオブジェクトが 入っていることに注意してください。

  • 抽象クラス について

    obj.write();した時 class super1 の write()が呼ばれ その後 class HINA の write()が呼ばるのか? 直接 class HINA の write()が呼ばるのか? どう呼び出してるのか 教えてください abstract class super1 { abstract void write(); } class HINA extends super1{ void write() { System.out.println( "LOVE HINA" ); } } class test { public static void main( String args[] ) { super1 obj = new HINA(); obj.write(); } } }

  • メンバ関数の引数としてオブジェクトの配列をとれる?

    VC++6.0 on W2Kを使っている初心者です。 表題のとおりですが、具体的なプログラムは下のようです。 また、*部分に相当するところもエラーになるのですが、 どのように変えればよいのでしょうか? なお、プログラムの内容そのものには意味はなく 単に動作確認のためのサンプルです。 実行すると、 「How many cats do you create?」 と聞かれるので、数字を入力すると、 Nekoオブジェクトが生成され、i番目の猫にはiという名が付けられます。 そして、「何匹目を鳴かせますか?」と聞かれるので、 数字を入力すると、 「My name is i-th cat.」 と答えられ、さらに、Inuが、 「i-th cat is tasty.」 と答える、という内容になっています。 #include <iostream> #include <string> using namespace std; class Neko { int name; public: Neko(){} Neko(int n):name(n){} void setname(int n){name=n;} int getname(){return name;} void naku(int n) const; }; void Neko::naku(int i) const { cout <<"My name is "<<getname()<<"th cat."<<endl;・・・* } class Inu { public: Inu(){} void naku(int i) const; }; void Inu::naku(int i)const{ cout <<i<<"th cat is tasty."<<endl; } int main() { int i; int num; int temp; Neko *x; Inu y; cout <<"How many cats do you create?"<<endl; cin >>num; x=new Neko[num]; for(i=0;i<num;i++){ x[i].setname(i); } cout <<"何匹目を鳴かせますか?"<<endl; cin >> temp; x[temp].naku(); y.naku(temp); }

  • 以下のコードのどこが問題なのでしょうか?

    java初心者です。よろしくお願いいたします。以下のコードはどこに問題があるのでしょうか?よろしくお願いいたします。 public class Sample2 { public static void main(String[] args1,String[] args2) { MyObject object = new MyObject(); object.setName("mikel" , "jun"); String s = object.getName(); System.out.println(s); } } class MyObject { String name; public void setName(String str1,String str2) { name = "str1"+"str2"; } public String getName() { return name; } }

    • ベストアンサー
    • Java
  • コマンドプロンプトを使用して。

    よろしくお願いいたします。ネット上にあったサンプルコードをコンパイルし、実行したところ 「Exception in thread "main"java.lang.NoSuchMethodError: main」というメッセージが表示されたのですがどういうことなのでしょうか? コードは以下の通りです。わかる方いましたらよろしくお願いいたします。 public class Sample { public static void main(String[] args1,String[] args2) { MyObject object = new MyObject(); object.setName("mikel"); String s = object.getName(); System.out.println(s); } } class MyObject { String name; public void setName(String str) { name = str; } public String getName() { return name; } }

    • ベストアンサー
    • Java
  • スーパークラスのコンストラクタの処理を引き継ぐ

    基本情報18年秋のJava問題問12の設問1(a)の問でわからないことがあるので教えてください。 スーパークラスを継承したクラスのコンストラクタ内の処理を、スーパークラスのコンストラクタと同じ処理する場合の記述についてです。 問題と解答(http://www.jitec.jp/1_04hanni_sukiru/mondai_kaitou.html#18aki)はここですが、簡単に書くと、次のようになります。 抽象クラスBook abstract class Book { String name; String id; Book(String name, String id) { this.name = name; this.id = id; } ~ } Bookを継承したRegularBook class RegularBook extends Book { RegularBook(String name, String id) { ここが穴埋め ; } ~ } 穴埋めの解答群5つのうちの2つが次のとおりです。 エ super(name, id) オ this.name = name; this.id = id もちろんエが正解です。 普通ここにエの記述をするのはわかるのですが、なぜ「オ」が「絶対に間違い」と言い切れるのかが分からないのです。 スーパークラスのコンストラクタ内の処理が変更になった場合、それを継承するクラスのコンストラクタの処理にも反映されるとか、そういう意味でもエの書き方は便利だとは思いますが、オも絶対に間違いといいきれないのでは?? お尋ねしたいのは、情報処理試験の問題として、絶対に間違いでない選択肢を2つ以上もいれるはずもないので、オは「なにがなんでも間違い」なんだろうけれどもその理由が分からないのです。 オが確実に間違っているという理由が分かりましたら教えてください。よろしくおねがいいたします。

  • ある特定の値(変数)を持たせたい時のクラスの設計法は?

    例えば、「人」クラスと、それを拡張した「杉山」、「鈴木」等具体的な名前を与えるクラスを設計する時、「名前」にあたるものはクラスを作った時点で分かるはずです。 また、「人」クラスをスーパークラスとして持つことも共通しています。 こういった場合、名前にあたる変数はどのように実装するべきなのでしょうか? 例えば、 class Person{ } class Suzuki extends Person{ String name = "suzuki"; } のように、するべきなのか class Person{    STring name_;    void setName(String name){       name_ = name;    } } class Suzuki extends Person{    setName("Suzuki"); } のようにするべきなのか、何がベターなのかよく分かりません。 出来れば、Personクラスを拡張したクラスには、忘れないようにnameフィールドに値を入れるようにしたいのですが、抽象クラスも何か違うのかなぁ…と(よく分かりませんが)。 よろしくお願いします。

    • ベストアンサー
    • Java
  • javaの配列とクラス

    abstract class abstract_class{ } class subclassA extends abstract_class{ int num = 1; } class subclassB extends abstract_class{ int num = 2; } class subclassC extends abstract_class{ int num = 3; } class Main{ public static void main(String args[]){ int sum = 0; abstract_class var[] = new abstract_class[3]; var[0] = new subclassA(); var[1] = new subclassB(); var[2] = new subclassC(); for(int i=0;i<3;i++) sum += var[i].num; System.out.println(sum); } } これをコンパイルすると Main.java:23: シンボルを見つけられません。 シンボル: 変数 num 場所 : abstract_class の クラス for(int i=0;i<3;i++) sum += var[i].num; ^ エラー 1 個 というエラーが出るのはなぜでしょうか? var[i]はみなsubclassA,subclassB,subclassCが代入されているのに、numはabstract_classの変数となっています。 よくわかりません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • JSのクラスについての質問

    JSのクラスについての質問 ソース class Cat { constructor(name) {this.name = name} meow() {alert( this.name + 'はミャオと鳴きました' )} } //インスタンス作成 var clsObj = new Cat("my cat"); //インスタンス(オブジェクト)の中身を出力 console.log(clsObj); 初心者なのでこの中のどの記述が必須で、 またnameはどれと対になっているかがわかりません。 インスタンスはnew クラス名 となっている所で作成されて変数に作られたインスタンスが代入されるというのは何となく分かったのですが、 console.log(clsObj); VM793:9 Cat {name: "my cat"} となるのがいまいちわかりません。 new Cat("my cat");は class Cat { constructor(name) {this.name = name} meow() {alert( this.name + 'はミャオと鳴きました' )} } を実行するという事で、 引数は constructor(name) new Cat("my cat"); が対になっているのでnameがmycatに代わるという事でしょうか? new Cat("my cat");が実行された結果がインスタンスという事ですが、 mycatがインスタンスなのですか? 大変恐縮ですが、簡単に一連の流れを教えていただければ幸いです。 class Cat { constructor(name) {this.name = name} meow() {alert( this.name + 'はミャオと鳴きました' )} } にどう渡されてどのように処理され何がインスタンスとして吐き出されるのでしょうか?

  • コンストラクタとその類似の形について 初心者です。

    コンストラクタについて勉強したばかりのところ、似たような記述に出会い違いが全くわかりません。 プログラム1 class Book { int price; int num = 0; String title; Book(String t, int p) { ...☆ title = t; price = p; } ・      ・       ・ プログラム2 class Cat { String name; String place; int age; void setData(String n, String p, int a) {...★ name = n; place = p; age = a; }      ・      ・      ・ ☆と★の違いがわかりません。どちらも値(変数)を代入してるという点では同じですよね。なぜ★はvoidがつくのに☆はつかないのでしょうか? 本によると☆のほうはコンストラクタで、★はコンストラクタではなくメソッドらしいのですが・・・。使い分けはどういうときするのでしょうか?  よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう