@634

オブジェクトの代入 その1

Advertisement

オブジェクトの代入。

オブジェクトの型が違う場合でも、メソッド呼び出しの引数として渡せる場合があるのと、違う型のオブジェクト変数に代入できる場合がある

例1。可能な例。
public class ObjCast{
    public static void main(String args[]){
        Vehicle ve = new Vehicle(new String("乗り物"));
        Car ca = new Car(new String("車"));

        //ここでCarクラスのオブジェクト変数を
        //スーパークラスVehicleのオブジェクト変数に
        //代入してみる
        ve = ca;
    }
}

class Vehicle{
    protected String name;

    public Vehicle(String n){
        name = n;
    }
}

class Car extends Vehicle{
    public Car(String s){
        super(s);
    }

    public void go(){
        System.out.println(name + "はブーンと。");
    }
}
9行目でCarクラスのオブジェクトを、親クラス(スーパークラス)Vehicleのオブジェクト変数に代入。

以下のようにした場合コンパイルエラーになる。
public class ObjCast{
    public static void main(String args[]){
        Vehicle ve = new Vehicle(new String("乗り物"));
        Car ca = new Car(new String("車"));

        ve = ca;

    ca.go();  //goメソッド呼び出し
    ve.go();  //こっちも。
    }
}

class Vehicle{
    protected String name;

    public Vehicle(String n){
        name = n;
    }
}

class Car extends Vehicle{
    public Car(String s){
        super(s);
    }

    public void go(){
        System.out.println(name + "はブーンと。");
    }
}
結果。
ObjCast.java:9: シンボルを解決できません。
シンボル: メソッド go()
場所  : Vehicle の クラス
          //ve.go();
             ^
エラー 1 個
代入はできたのに、使えない。

今回のまとめ
自分から見て上のクラスのオブジェクトには代入できる、けど、サブクラス独自のメソッドは使えません。

オーバーライドすると、また違うんだよなぁ。まぁ、そりゃまた次回。


おまけ、何個上でもOK。
public class th{
    public static void main(String args[]){
        Vehicle ve = new Vehicle(new String("乗り物"));
        Car ca = new Car(new String("車"));
        SuperCar sc = new SuperCar(new String("スーパーカー"));

        ve = ca;
        
        //おまけ:問題なし。
        ve = sc;
        
        //これも平気。
        ca = sc;
    }
}

class Vehicle{
    protected String name;

    public Vehicle(String n){
        name = n;
    }
}

class Car extends Vehicle{
    public Car(String s){
        super(s);
    }

    public void go(){
        System.out.println(name + "はブーンと。");
    }
}

class SuperCar extends Car{
    public SuperCar(String s){
        super(s);
    }

    //メソッドはめんどいから省略。
}

Advertisement

ショートカット

634
このカテゴリのトップページに戻る
634labs
   UIコレクションギャラリー

サイト検索

Google

Web サイト内

Y!ログール