ホームページ > Java > &#&チュートリアル > Java でスーパークラスからサブクラス メソッドにアクセスするにはどうすればよいですか?

Java でスーパークラスからサブクラス メソッドにアクセスするにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-07 10:04:12
オリジナル
777 人が閲覧しました

How Can I Access Subclass Methods from a Superclass in Java?

スーパークラスからのサブクラス メソッドの呼び出し

問題

Java では、クラスを継承してサブクラスを作成するときに、サブクラス固有のメソッドへのアクセスで問題が発生することがよくありますスーパークラス内から。これは、サブクラス オブジェクトをインスタンス化し、それをスーパークラス変数に割り当てるときに発生します。

解決策

この制限を解決するには、次のいずれかの方法を使用できます:

  • 変数を派生変数として宣言しますclass:

1

2

3

Cat cat = new Cat("Feline", 12, "Orange");

cat.getName(); // OK

cat.getColor(); // OK (getColor() is in Cat)

ログイン後にコピー
  • 変数を目的の具象型にキャストします:

1

2

3

Pet pet = new Cat("Feline", 12, "Orange");

((Cat)pet).getName(); // OK

((Cat)pet).getColor(); // OK (explicitly treated as Cat)

ログイン後にコピー

を実行するときキャストの場合、オブジェクトを一時的に指定された型のインスタンスとして扱います。これにより、サブクラス固有のメンバーとメソッドにアクセスできるようになります。

次の変更された Main クラスについて考えてみましょう:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

public class Kennel {

    public static void main(String[] args) {

        // Create the pet objects

        Cat cat = new Cat("Feline", 12, "Orange");

        Pet dog = new Dog("Spot", 14, "Dalmatian");

        Pet bird = new Bird("Feathers", 56, 12);

 

        // Print out the status of the animals

        System.out.println("I have a cat named " + cat.getName()

                + ". He is " + cat.getAge() + " years old."

                + " He is " + cat.getColor()

                + ". When he speaks he says " + cat.speak());

 

        // Using a cast to access a subclass-specific method

        ((Cat)dog).getBreed(); // dog is treated as Cat to access getBreed()

        System.out.println("I also have a dog named " + dog.getName()

                + ". He is " + dog.getAge() + " years old."

                + " He is a " + ((Cat)dog).getBreed()

                + ". When he speaks he says " + dog.speak());

 

        System.out.println("And Finally I have a bird named "

                + bird.getName() + ". He is " + bird.getAge() + " years old."

                + " He has a wingspan of " + bird.getWingspan() + " inches."

                + " When he speaks he says " + bird.speak());

    }

}

ログイン後にコピー

この例では、Main クラスは正常に取得します。キャストを使用して犬の品種を決定します。

以上がJava でスーパークラスからサブクラス メソッドにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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