第15講 クラスの学習その2
第4話 コンストラクタのオーバーロード

コンストラクタのオーバーロードとは、異なる引数でコンストラクタを再定義することです。
<<p.java>>
class p{
  public int i;
  public int j;
  p(){
    System.out.println("iを3にjを5に初期化します。");
    i=3;
    j=5;
  }
  p(int a,int b){ //コンストラクタのオーバーロード(異なる引数でのコンストラクタの再定義)
    System.out.println("iとjを引数で初期化する。");
    i=a;
    j=b;
  }

  
public int f(int a,int b){
    return(a+b);
  }
  public int g(int a,int b){
    return(a-b);
  }
  public int h(int a,int b){
    return(a*b);
  }
}



<<x.java>>
import java.io.*;
class x{
  public static void main(String args[]){
    p p1=new p(5,6); //インスタンスする際にiとjを5と6に初期化する。
    System.out.println("p1.iの中身:"+p1.i+" p1.jの中身:"+p1.j);
    System.out.println("p1.i+p1.j="+p1.f(p1.i,p1.j));
    System.out.println("p1.i-p1.j="+p1.g(p1.i,p1.j));
    System.out.println("p1.i×p1.j="+p1.h(p1.i,p1.j));
    p p2=new p();  //2つ目の実体化=設計図から2つめのオブジェクトを作る
    System.out.println("p2.iの中身:"+p2.i+" p2.jの中身:"+p2.j);
    System.out.println("p2.i+p2.j="+p2.f(p2.i,p2.j));
    System.out.println("p2.i-p2.j="+p2.g(p2.i,p2.j));
    System.out.println("p2.i×p2.j="+p2.h(p2.i,p2.j));
  }
}
実行結果
入門

p.javaのコードは次のようにも書けることはすでに学んでいます。
class p{
  public int i;
  public int j;
  p(){
    System.out.println("iを3にjを5に初期化します。");
    i=3;
    j=5;
  }
  p(int i,int j){ //コンストラクタのオーバーロード(異なる引数でのコンストラクタの再定義)
    System.out.println("iとjを引数で初期化する。");
    this.i=i;
    this.j=j;
  }

  public int f(int a,int b){
    return(a+b);
  }
  public int g(int a,int b){
    return(a-b);
  }
  public int h(int a,int b){
    return(a*b);
  }
}

this.i=i;は同じiでも違うものです。
右辺のiはこのクラスのiで、右辺のiは引数のiです。

さらに、次のようにオーバーロードして
class p{
  public int i;
  public int j;
  p(){
    System.out.println("iを3にjを5に初期化します。");
    i=3;
    j=5;
  }
  p(int i,int j){ //コンストラクタのオーバーロード(異なる引数でのコンストラクタの再定義)
    System.out.println("iとjを引数で初期化する。");
    this.i=i;
    this.j=j;
  }
  p(String c){ //コンストラクタのオーバーロード(異なる引数でのコンストラクタの再再定義)
    System.out.println(c);
    i=0;
    j=0;
  }

  public int f(int a,int b){
    return(a+b);
  }
  public int g(int a,int b){
    return(a-b);
  }
  public int h(int a,int b){
    return(a*b);
  }
}
x.javaコードと次のように書き換えると
import java.io.*;
class x{
  public static void main(String args[]){
    p p1=new p("iとjをそれぞれ0に初期化");
    System.out.println("p1.iの中身:"+p1.i+" p1.jの中身:"+p1.j);
    System.out.println("p1.i+p1.j="+p1.f(p1.i,p1.j));
    System.out.println("p1.i-p1.j="+p1.g(p1.i,p1.j));
    System.out.println("p1.i×p1.j="+p1.h(p1.i,p1.j));
    p p2=new p(12,26);
    System.out.println("p2.iの中身:"+p2.i+" p2.jの中身:"+p2.j);
    System.out.println("p2.i+p2.j="+p2.f(p2.i,p2.j));
    System.out.println("p2.i-p2.j="+p2.g(p2.i,p2.j));
    System.out.println("p2.i×p2.j="+p2.h(p2.i,p2.j));
    p p3=new p();
    System.out.println("p3.iの中身:"+p3.i+" p3.jの中身:"+p3.j);
    System.out.println("p3.i+p3.j="+p3.f(p3.i,p3.j));
    System.out.println("p3.i-p3.j="+p3.g(p3.i,p3.j));
    System.out.println("p3.i×p3.j="+p3.h(p3.i,p3.j));

 
 }
}

とすると実行画面はどうなりますか。
答えは30行下。















実行画面
Java
p p1=new p("iとjをそれぞれ0に初期化");
p p2=new p(12,26);
p p3=new p();
でそれぞれ異なって初期化されています。


第3話へ 第5話へ

戻る

VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部