2013年8月3日土曜日

Javaでのクラス継承時のコンストラクタ

仕事で Android アプリの開発をすることになったものの、
java とかほとんど触ったこともないワケで。

ちょっくら java のコンストラクタの呼ばれ方が気になったので
実験してみた。

  • SuperClass.java
public class SuperClass {

 protected String status = "status :";

 //1.引数なしスーパークラスコンストラクタ
 public SuperClass()
 {
  status += " Super 1 Called";
 }

 //2.引数ありスーパークラスコンストラクタ
 public SuperClass(Context context)
 {
  status += " Super 2 Called";
 }

 @Override
 public String toString()
 {
  return status;
 }
}

  • SubClass.java
public class SubClass extends SuperClass{

 private Context context;

 //3.引数なしサブクラスコンストラクタ
 public SubClass()
 {
  status += " Sub 1 Called";
 }

 //4.引数ありサブクラスコンストラクタ
 public SubClass(Context _context)
 {
  status += " Sub 2 Called";
  context = _context;
 }

 //結果表示
 public void checkValue()
 {
  Toast.makeText(context, toString(), Toast.LENGTH_SHORT).show();
 }
}

  • MainActivity.java
public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  final SubClass subClass = new SubClass(this);

  Button button = (Button)findViewById(R.id.button1);
  button.setOnClickListener(new OnClickListener(){
   @Override
   public void onClick(View arg0) {
    subClass.checkValue();
   }
  });
 } 
  • activity_main.xml
(ボタン1コ置いてあるだけなんで省略。。。)


んで実行結果が

status : Super 1 Called Sub 2 Called

なので、呼び出し順としては

 1.スーパークラス引数なしコンストラクタ
 4.サブクラス引数ありコンストラクタ

ってことか。

どのコンストラクタがどの順番で呼ばれるか、てのは実際やってみると
なるほどって感じですな。

0 件のコメント:

コメントを投稿