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.事前準備
- Eclipseを起動し、
[ファイル(F)]→[新規(N)]→[Java プロジェクト]
を選択する。
- プロジェクト名に
Test1
と入力し、完了
ボタンをクリックする。
-
[ファイル(F)]→[新規(N)]→[クラス]
を選択する。
- パッケージと名前に
Test1
と入力し、完了
ボタンをクリックする。
-
Test1.java
が作成されたことを確認する。
- 3と同様の手順でパッケージに
Test1
, 名前にHello
と入力し、完了
ボタンをクリックする。
- 3と同様の手順でパッケージに
Test1
, 名前にGoodMorning
, スーパークラスにHello
と入力し、完了
ボタンをクリックする。
- 3と同様の手順でパッケージに
Test1
, 名前にGoodEvening
, スーパークラスにGoodMorning
と入力し、完了
ボタンをクリックする。
-
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
で保存し、実行するとこうなります。↓↓
注意点
-
アップキャスト後
の実態はサブクラスの縮小
なため、スーパークラスに同じメソッドが存在する場合はサブクラスが優先
される。
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
で保存し、実行するとこうなります。↓↓
6.GitHub
GitHubにソースコードを公開しています。