ホームページ > Java > &#&チュートリアル > Java の「instanceof」演算子は実行時にオブジェクトの型をどのように決定するのでしょうか?

Java の「instanceof」演算子は実行時にオブジェクトの型をどのように決定するのでしょうか?

DDD
リリース: 2024-12-24 03:23:13
オリジナル
792 人が閲覧しました

How Does Java's `instanceof` Operator Determine Object Type at Runtime?

Java での instanceof 演算子の探索

instanceof 演算子は Java の型システムの不可欠な部分であり、実行時の型を決定できます。

instanceof を使用する場合、オブジェクト参照と型を比較します。構文は次のパターンに従います。

expression instanceof Type
ログイン後にコピー

比較の結果はブール値で、オブジェクトが指定された型のインスタンスであるかどうかを示します。たとえば、次のコードの場合:

if (source instanceof Button) {
    //...
} else {
    //...
}
ログイン後にコピー

source が Button クラスのインスタンスの場合、if ステートメントは true と評価され、ブロック内のコードが実行されます。ソースが Button ではない場合、代わりに else ステートメントが実行されます。

概念を理解するために、単純化されたクラス階層を考えてみましょう。

interface Domestic {}
class Animal {}
class Dog extends Animal implements Domestic {}
ログイン後にコピー

Dog オブジェクトを作成して比較すると、これは、instanceof:

Dog dog = new Dog();
System.out.println(dog instanceof Domestic);  // true
System.out.println(dog instanceof Animal);    // true
System.out.println(dog instanceof Dog);     // true
ログイン後にコピー

を使用します。Dog は家畜と動物の両方のサブタイプであるため、この結果は理にかなっています。また、Dog クラス自体も拡張します。ただし、別のサブタイプと比較しようとすると、

System.out.println(dog instanceof Cat);  // compilation error
ログイン後にコピー

Dog は Cat のサブタイプではないため、コンパイル エラーが発生します。

instanceof 演算子は特に便利です。ポリモーフィックな動作を扱うときにオブジェクトの実行時タイプを決定するために使用されます。共通の基本クラスから継承する複数の型があるシナリオを考えてみましょう:

class Shape {}
class Circle extends Shape {}
class Square extends Shape {}
ログイン後にコピー

Shape オブジェクトを引数として受け入れるメソッドでは、instanceof を使用して特定の型を区別できます:

public void drawShape(Shape shape) {
    if (shape instanceof Circle) {
        // Draw circle
    } else if (shape instanceof Square) {
        // Draw square
    } else {
        // Handle other shapes
    }
}
ログイン後にコピー

instanceof を使用すると、実行時にさまざまなタイプのオブジェクトに応答でき、コードがより柔軟で適応性のあるものになります。

以上がJava の「instanceof」演算子は実行時にオブジェクトの型をどのように決定するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート