- ベストアンサー
コンストラクタの記述について ―引数を持ったクラスを継承する場合―
- ActionScript3.0でのクラスの継承において、コンストラクタの記述についての問題が発生しています。
- 引数を持ったクラスを継承する場合、コンストラクタの記述方法に注意が必要です。
- コンストラクタに引数がある場合、親クラスのデフォルトコンストラクタの定義が必要となります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
- taka451213
- ベストアンサー率47% (436/922)
関連するQ&A
- staticメソッドの継承
お世話になります。 static メソッドの継承についてなのですが、 class Parent { public static String name = "Parent"; public static getName() { return name; } } class Child extends Parent { public static String name = "Child"; } だと、 Parent.getName(); Child.getName(); はともに Parent を返します。 ChildにてgetName()をオーバーライドすれば望む結果が得られるのですが、何かスマートでは無いような気がしてしまいます。 継承したstaticメソッドは親の元で実行され、そしてアクセスするstatic変数が親というのは何故なのでしょうか? 根本的な質問かもしれませんが、よろしくお願いいたします。
- ベストアンサー
- Java
- スーパークラスのコンストラクタの呼び出し
こんにちは。 スーパークラスに引数のあるコンストラクタと引数のないコンストラクタをサブクラスで継承する際の質問です。 具体的に書くと下記になります。 class A { A () {} A (int i) {} } class B extends A { } 何がわからないかというと 『スーパークラスのA()は、サブクラスのBでわざわざ明示的にスーパークラスのコンストラクタ呼び出しをしなくても問題ないというのはわかるのですが、なぜスーパークラスのA(int)は、呼び出さなくても良いのかということです。』 もしかしたら基礎中の基礎かもしれませんが、ご教授よろしくお願いいたします。
- ベストアンサー
- Java
- 親クラスのコンストラクタは? 引数付きコンストラクタは?
VisualBasic.NETです。 あるクラスを継承したクラスからインスタンスを作成したときに、派生クラスのコンストラクタは呼び出されると思うのですが、基本クラスのコンストラクタはどうなるのでしょうか? JAVAのように、super() で呼び出す必要があるのでしょうか? 自動で呼び出されるのでしょうか? それとも、そもそも呼び出せないのでしょうか? また、引数の個数が違うコンストラクタは、同じクラス内に設定できるのでしょうか? JAVAのコードを移植しようと考えているのですが、出来るのかどうかが分からずに悩んでいます。 ご存じの方、よろしくお願いします。
- ベストアンサー
- Visual Basic
- static変数を持ったクラスを継承した複数のクラスで、独立してその変
static変数を持ったクラスを継承した複数のクラスで、独立してその変数を使いたい。 例えば、 class AbstractStatic{ public static String str; } class Ex1 extends AbstractStatic{} class Ex2 extends AbstractStatic{} というクラスがあったとして、 Ex1 e1 = new Ex1(); ex1.str = "hoge"; といれると、 ex2.str で、hogeが入ってしまいます。同じようなstatic変数を持つクラスを複数作りたいのですが、継承させると、独立して変数を持たせられません。 同じようなクラスに直接static変数を、記述するしかないのでしょうか?
- ベストアンサー
- Java
- 継承における暗黙のデフォルトコンストラクター
”継承の際、スーパークラスで引数なしのコンストラクターが省略せずにきちんと記述されるなら、そのサブクラスでコンストラクターを記述しなくても、スーパークラスの引数なしのコンストラクターが受け継がれるためコンパイルエラーがおきない。”のは分かりますが”スーパークラスで引数なしのコンストラクターが省略され、かつサブクラスでコンストラクターを省略した場合”はなぜコンパイルエラーがおきるのでしょうか? 暗黙の内にスーパークラスにコンストラクターが生成され、それがサブクラスに受け継がれることは出来ないのでしょうか? 宜しく願います。
- 締切済み
- Java
- javaの継承について
以下のコードがある場合に、想定では「child」が出力されるとおもっていたのですが、 実際は「parent」が出力されます。 3行目でChildをnewしているので16行目のメソッドが呼び出され 画面に「child」が出力されると思っていたのですが、実行結果で その考えが違う事がわかりました。 実行結果から想定すると、3行目で定義している変数sは Parentクラスを指しているため、4行目で呼び出されるメソッドは 9行目になるのかなと思っています。 しかし、Parentクラス及びChildクラスのstaticを外すと 実行結果がchildとなります。 何故staticをつけた場合とつけない場合で実行結果が 異なるのでしょうか。 ■以下コード 1:public class samplexx { 2: public static void main(String[] args){ 3: Parent s = new Child(); 4: System.out.println(s.getName()); 5: } 6:} 7:class Parent{ 8: public static String name ="parent"; 9: public static String getName(){ 10: return name; 11: } 12:} 13: 14:class Child extends Parent{ 15: public static String name="child"; 16: public static String getName(){ 17: return name; 18: } 19:}
- 締切済み
- Java
- VB2008: 継承の場合のコンストラクタの書き方?
' ================================================================== ' クラス TEST1 ' ================================================================== <Serializable()> Public Class TEST1 Private _Member1 As String Private _Member2 As String ' // ' // パラメータを持つ初期化 ' // Public Sub New(ByVal aMember1 As String, ByVal aMember2 As String) _Member1 = aMember1 _Member2 = aMember2 End Sub End Class ' =========================== ' クラス TEST1 の派生クラス ' =========================== <Serializable()> Public Class NEWTEST1 Inherits TEST1 Private _Member1 As New TEST1 Private _Member2 As New TEST1 End Class これでもOKかと思うのですが・・・。 パラメータ化されていないコンストラクタをクラス TEST1 に書くように促すエラーがでます。 もちろん、パラメータを持たないコンストラクタを用意すればエラーは回避できます。 問題は、「Visual Basic のプログラミングガイド」からその理由を読み取れないことです。 >Visual Basic のオブジェクトの概要 >クラスについて >オブジェクトの作成と使用 まだ、ここしか読んでいません。 が、どうにも気になったので質問します。 1、エラーの回避策としては何が正しいのか? 2、その根拠は? この2つが知りたいです。
- ベストアンサー
- Visual Basic
- 継承したクラスを、継承元のクラス型の引数に渡すとどうなるのでしょうか?
継承したクラスを、継承元のクラス型の引数に渡すとどうなるのでしょうか? 以下のようなケースで、 #include "stdio.h" using namespace std; // baseクラス class base { private: int m_nII; int m_nJJ; int m_nKK; public: base(int i,int j,int k){ m_nII=i; m_nJJ=j; m_nKK=k; } int GetSum(){ return (m_nII+m_nJJ+m_nKK); } }; // base 継承クラス class hoge : public base { public: hoge() : base(1,2,3){} }; void func(base* obj){ // baseクラスを引数に取る関数 printf("sum is %d\n", obj->GetSum()); } // main int main(){ hoge objHoge; func((base*)&objHoge); // <-キャストして渡す return 0; } として、一応、gccでコンパイルは通り、実行結果も期待通りだったのですが、 このやり方で問題は無いのでしょうか? (たとえば継承先のクラスが独自のメンバを持っていたりなどした場合、期待した結果にならないとか・・) よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 継承元クラスのプロパティを参照する手段
お世話になります。 ActionScrip3に関する質問です。 現在、カスタムクラスを勉強しております。 外部クラスでClassA、ClassBを作成し、 ClassAにある処理の途中でClassBを実行し、ClassBの中からClassAのプロパティを参照しにいく 処理を行いたいと思い、ClassBのコンストラクタからClassAのプロパティをtraceしました。 プロパティppt2は「かきくけこ」が出力されましたが、ppt1は「null」になってしまいました。 恐らく、タイムラインからClassAに対して設定したプロパティの値は見にいけていないようですが、 タイムラインから設定したプロパティの値を継承したClassBから参照しにいく方法はありますでしょうか? 下記ソースと同じ方法でなくても結構ですので、タイムラインから設定した スーパークラスのプロパティ値をサブクラスから参照・変更できる方法を ご教授いただければと存じます。 お手数ではありますが、宜しくご教授ください。 宜しくお願いいたします。 /* タイムライン側の処理 -----------------------*/ var test:ClassA = new ClassA(); test.ppt1 = "あいうえお"; test.goNext(); /* ClassAの処理 -----------------------*/ package { // インポート記述は省略 public class ClassA { var ppt1:String; var ppt2:String = "かきくけこ"; // コンストラクタ public function ClassA() { } public function goNext():void { var classb:ClassB = new classB(); } } } /* ClassBの処理 -----------------------*/ package { // インポート記述は省略 public class ClassB extends ClassA { // コンストラクタ private function ClassB() { trace(ppt1); trace(ppt2); } } }
- ベストアンサー
- Flash
- 継承(extends)について
extendsについてわからないことがあります。 次の3つのクラスがあった時、 class スーパークラス { ... class サブクラス1 extends スーパークラス { ... class サブクラス2 extends サブクラス1 {... サブクラス2は、サブクラス1でスーパークラスから継承しているフィールドをメソッドを継承するのでしょうか?
- ベストアンサー
- Java
お礼
1年以上遅れてしまいましたが、 ご回答いただきありがとうございました! 当時、ものすごくテンパっていたので お返事せずそのまま忘れてしまいました……。