オブジェクトの代入 その1Advertisementオブジェクトの代入。
オブジェクトの型が違う場合でも、メソッド呼び出しの引数として渡せる場合があるのと、違う型のオブジェクト変数に代入できる場合がある。
例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・634ブログ ・このカテゴリのトップページに戻る ・Incubator(Pukiwiki) ・634ラボ UIコレクションギャラリー ZO-3ジェネレーター サイト検索Y!ログール |