質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

キャスト

キャストとは、オブジェクトの型の変換が許可された場合に、明白に別の型への変換を行うプロセスのことです。

Q&A

解決済

2回答

2146閲覧

【Java】アップキャストが明示的な型変換をせずに自動で型変換されることについてわかりません。

best.practice

総合スコア9

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

キャスト

キャストとは、オブジェクトの型の変換が許可された場合に、明白に別の型への変換を行うプロセスのことです。

0グッド

0クリップ

投稿2020/07/31 02:30

前提・実現したいこと

Javaのアップキャストがなぜ自動的に型変換してくれるのかわかりません。
また、ダウンキャストが明示的に型変換しなければならないのかもわかりません。

発生している問題・エラーメッセージ

特になし

該当のソースコード

Java

1class A { 2 void dispA() { 3 System.out.println("A"); 4 } 5} 6 7class B extends A { 8 void dispB() { 9 System.out.println("B"); 10 } 11} 12 13class Test { 14 public static void main(String[] args) { 15 B b = new B(); 16 A a = b; 17 a.dispA(); 18 } 19} 20

試したこと

特になし

補足情報(FW/ツールのバージョンなど)

使用ツール:eclipse4_8.0

基本データ(プリミティブ)型の型変換では大きい型に小さい型を代入する場合は自動で型変換が行われ、
小さい型に大きい型を代入する場合は明示的にキャストしなければならないと学びました。

上記のソースコードではスーパークラス.a(小さい型)にサブクラス.b(大きい型)を代入しているように見えます。
逆にサブクラス.a(大きい型)にスーパークラス.a(小さい型)を代入する場合に明示的に型変換をしなければならない理由がわかりません。

基本データ(プリミティブ)型の代入の時と扱いが違うのでしょうか。

ここでつまづいている人がいないせいかインターネットで調べても出てきませんでした。
ご教授いただけますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

サブクラスはスーパークラスにフィールドやメソッドを追加して作成する関係上、
スーパークラスに比べて持っている情報やできることが多いクラスという事になります。
裏返すと、サブクラス型にはスーパークラスよりも厳しい制約をクリアしたものしか入れられない、という事になります。この意味で、サブクラスはスーパークラスと比べて「小さい」型になります。

投稿2020/07/31 02:46

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

best.practice

2020/07/31 02:59 編集

回答いただきありがとうございます。 追加で質問なのですが、サブクラスはスーパークラスと比べ持てる情報が多いことから 制約が厳しく入れられる箱の大きさがスーパークラスの方がサブクラスよりも大きい。というのを 基本データ型にあてはめ語弊を恐れずに言えば、 double:数字 int:数字かつ整数 のように考えればdoubleのほうが制約が少なく入れられるものが多い。ことからintよりも大きい型としてみなせるという認識でもよろしいでしょうか。
swordone

2020/07/31 03:13

そう考えれば、型の問題を画一的に見ることができると思います。
best.practice

2020/07/31 04:03

swordone様 やっとしっくりきました。 ご回答いただきありがとうございました。
guest

0

スーパークラス.a(小さい型)にサブクラス.b(大きい型)を代入しているように見えます

いえ、入れられるものという観点で見れば、スーパークラスのほうが「大きな型」です。

投稿2020/07/31 02:37

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

best.practice

2020/07/31 04:04

maisumakun様 ご回答いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問