1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【わかりやすく解説‼】Javaにおける参照型の型変換

Last updated at Posted at 2020-05-08

1.事前知識

事前知識として、上記リンクの内容が必要です。

2.参照型の型変換とは

  • 参照型の型変換 には、 アップキャストダウンキャスト がある。
  • アップキャスト は、サブクラスのインスタンスを スーパークラス型のオブジェクト として扱うこと。
  • ダウンキャスト は、スーパークラスのインスタンスを サブクラス型のオブジェクト として扱うこと。
  • ダウンキャスト は、キャスト演算子「()」を使用して行う。

3.基本的な書き方

アップキャスト
public class メインクラス名{
    public static void main(String[] args) {
        // インスタンスの生成
        サブクラス名 変数名1 = new サブクラス名();
        // アップキャスト
        スーパークラス名 変数名2 = 変数名1;
    }
}
ダウンキャスト
public class メインクラス名{
    public static void main(String[] args) {
        // インスタンスの生成
        スーパークラス名 変数名1 = new サブクラス名();
        // アップキャスト
        サブクラス名 変数名2 = (サブクラス名)変数名1;
    }
}
  • 基本的な参照型の型変換は上記のように記述する。

4.事前準備

01.png

  1. Eclipseを起動し、 [ファイル(F)]→[新規(N)]→[Java プロジェクト] を選択する。
    02.png
  2. プロジェクト名に Test1 と入力し、 完了 ボタンをクリックする。
    03.png
  3. [ファイル(F)]→[新規(N)]→[クラス] を選択する。   
    05.png
  4. パッケージと名前に Test1 と入力し、 完了 ボタンをクリックする。
    06.png
  5. Test1.java が作成されたことを確認する。
    001.png
  6. 3と同様の手順でパッケージに Test1 , 名前に Hello と入力し、 完了 ボタンをクリックする。
    002.png
  7. 3と同様の手順でパッケージに Test1 , 名前に GoodMorning , スーパークラスに Hello と入力し、 完了 ボタンをクリックする。
    003.png
  8. 3と同様の手順でパッケージに Test1 , 名前に GoodEvening , スーパークラスに GoodMorning と入力し、 完了 ボタンをクリックする。
    004.png
  9. Test1.java , Hello.java , GoodMorning.java , GoodEvening.java が作成されれば成功。

5.記述例

  • 参照型の型変換 は、 スーパークラス または サブクラス が 持っている メソッドの呼び出しメソッドの定義範囲を変える ために使用する。
Test1.java
package Test1;
public class Test1 {
    public static void main(String[] args) {
        // インスタンスの生成
        GoodEvening ge1 = new GoodEvening("A");
        ge1.showGoodMorning();

        // アップキャスト
        Hello hello = ge1;
        hello.showHello();

        // ダウンキャスト
        GoodEvening ge2 = (GoodEvening) hello;
        ge2.showGoodEvening();
        //((GoodEvening) hello).showGoodEvening();
    }
}
Hello.java
package Test1;
public class Hello{
	// 変数の定義
	String name;

	// コンストラクタ
	public Hello(String name) {
		this.name = name;
	}

	// 挨拶の表示
	void showHello() {
		System.out.println(name + "さん、こんにちは。");
	}
}
GoodMorning.java
package Test1;
public class GoodMorning extends Hello {
	// コンストラクタ
	public GoodMorning(String name) {
		super(name);
	}

	// 挨拶の表示
	void showGoodMorning() {
		System.out.println(name + "さん、おはようございます。");
	}
}
GoodEvening.java
package Test1;
public class GoodEvening extends GoodMorning {
	// コンストラクタ
	public GoodEvening(String name) {
		super(name);
	}

	// 挨拶の表示
	void showGoodEvening() {
		System.out.println(name + "さん、こんばんは。");
	}
}

上記の文をコピーして、文字コードは S-JIS を指定し、ファイル名を Test1.java , Hello.java , GoodMorning.java , GoodEvening.java で保存し、実行するとこうなります。↓↓  
005.png

注意点

  • アップキャスト後 の実態は サブクラスの縮小 なため、スーパークラスに同じメソッドが存在する場合は サブクラスが優先 される。
Test1.java
package Test1;
public class Test1 {
    public static void main(String[] args) {
        // インスタンスの生成
        TestB b = new TestB();
        b.view();// Bが表示される

        // アップキャスト
        TestA a = (TestA) b;
        a.view();// Bが表示される
    }
}
class TestA {
    public void view() {
        // スーパークラスの表示
        System.out.println("A");
    }
}
class TestB extends TestA{
    public void view() {
        // サブクラスの表示
        System.out.println("B");
    }
}

上記の文をコピーして、文字コードは S-JIS を指定し、ファイル名を Test1.java で保存し、実行するとこうなります。↓↓  
006.png

6.GitHub

GitHubにソースコードを公開しています。

7.関連

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?