Java での型キャスト

Java における型キャストは、キャスト演算子を使用して、あるデータ型を別のデータ型に変換するプロセスです。あるプリミティブ データ型から別の型に値を割り当てることは、型キャストと呼ばれます。特定の方法で変数を使用できるようにするには、このメソッドでは、あるデータ型の変数を別のデータ型の変数として扱うように Java コンパイラに明示的に指示する必要があります。

構文:

 variableName = () value; 

型キャストの種類

Java には 2 つのタイプの型キャストがあります。

  • 拡幅型鋳物
  • ナロータイプ鋳物

拡幅型鋳物

下位のデータ型は、拡張型キャストとして知られるプロセスによって上位のデータ型に変換されます。暗黙的な型キャストとキャストダウンは、その名前の一部です。それは自然に起こります。データ損失の心配がないので安心です。 Widening Type キャストは次の場合に発生します。

  • ターゲットの型はソースの型より大きくなければなりません。
  • 両方のデータ型は相互に互換性がある必要があります。

構文:

larger_data_type variable_name = smaller_data_type_variable; 


ジャワ




// Java program to demonstrate Widening TypeCasting> import> java.io.*;> > class> GFG {> > public> static> void> main(String[] args)> > {> > int> i => 10> ;> > > // Wideing TypeCasting (Automatic Casting)> > // from int to long> > long> l = i;> > > // Wideing TypeCasting (Automatic Casting)> > // from int to double> > double> d = i;> > > System.out.println(> 'Integer: '> + i);> > System.out.println(> 'Long: '> + l);> > System.out.println(> 'Double: '> + d);> > }> }>

出力

Integer: 10 Long: 10 Double: 10.0 

ナロータイプ鋳物

より大きなデータ型をより小さなデータ型にダウンサイズするプロセスは、型の絞り込みキャストとして知られています。キャストアップまたは明示的な型キャストは別名です。それはただ自然に起こるわけではありません。これを明示的に行わないと、コンパイル時エラーが発生します。下位のデータ型では許可される値の範囲が狭いため、データ損失が発生する可能性があるため、型の絞り込みキャストは安全ではありません。キャスト演算子は、明示的なキャストのプロセスを支援します。

構文:

smaller_data_type variable_name = (smaller_data_type) larger_data_type_variable; 

例:

ジャワ




// Java Program to demonstrate Narrow type casting> import> java.io.*;> > class> GFG {> > public> static> void> main(String[] args)> > {> > double> i => 100.245> ;> > > // Narrowing Type Casting> > short> j = (> short> )i;> > int> k = (> int> )i;> > > System.out.println(> 'Original Value before Casting'> > + i);> > System.out.println(> 'After Type Casting to short '> > + j);> > System.out.println(> 'After Type Casting to int '> > + k);> > }> }>

出力

Original Value before Casting100.245 After Type Casting to short 100 After Type Casting to int 100 

明示的キャストの種類

明示的キャストには主に 2 つのタイプがあります。

  • 明示的なアップキャスト
  • 明示的なダウンキャスト

明示的なアップキャスト

アップキャストは、継承ツリーの上向き方向にサブタイプをスーパータイプにキャストするプロセスです。サブクラス オブジェクトがスーパークラス参照変数によって参照されると、それ以上の手間をかけずに自動プロセスがトリガーされます。

例:

ジャワ




// Java Program to demonstrate Explicit Upcasting> import> java.io.*;> > class> Animal {> > public> void> makeSound()> > {> > System.out.println(> 'The animal makes a sound'> );> > }> }> > class> Dog> extends> Animal {> > public> void> makeSound()> > {> > System.out.println(> 'The dog barks'> );> > }> > > public> void> fetch()> > {> > System.out.println(> 'The dog fetches a ball'> );> > }> }> class> GFG {> > public> static> void> main(String[] args)> > {> // Upcasting> > Animal animal => new> Dog();> > // Calls the overridden method in Dog class> > animal.makeSound();> > // This would give a compile error as fetch() is not> > // a method in Animal class> > // animal.fetch();> > }> }>

出力

The dog barks 

明示的なダウンキャスト

サブクラス型が親クラスのオブジェクトを参照する場合、そのプロセスはダウンキャストと呼ばれます。これを手動で実行すると、コンパイラは実行時 ClassCastException エラーを発行します。これは、instanceof 演算子を使用する場合にのみ実行できます。すでにアップキャストされているオブジェクトのダウンキャストのみが可能です。

例:

ジャワ




// Java Program to demonstrate Explicit downcasting> import> java.io.*;> class> Animal {> > public> void> eat()> > {> > System.out.println(> 'The animal is eating.'> );> > }> }> > class> Cat> extends> Animal {> > public> void> meow()> > {> > System.out.println(> 'The cat is meowing.'> );> > }> }> > class> GFG {> > public> static> void> main(String[] args)> > {> > Animal animal => new> Cat();> > animal.eat();> > > // Explicit downcasting> > Cat cat = (Cat)animal;> > cat.meow();> > }> }>

出力

The animal is eating. The cat is meowing.