ホームページ >Java >&#&チュートリアル >継承でスーパークラス変数からサブクラス メソッドにアクセスするにはどうすればよいですか?
継承の障害の克服: スーパークラスからサブクラス メソッドへのアクセス
継承の旅を始めると、メソッドへのアクセスで課題に遭遇するのが一般的です。サブクラスに固有。これらのハードルを解決するために、関係する概念を詳しく調べて、制限を回避する方法を見つけてみましょう。
変数の型指定とメソッドの可用性
変数を型として宣言するときスーパークラスのメソッドとメンバー変数へのアクセスを制限します。次の例を考えてみましょう。
Pet cat = new Cat("Feline", 12, "Orange"); cat.getName(); // this is OK cat.getColor(); // this is not OK, getColor() is not in Pet
変数 cat は Pet 型として宣言されているため、Pet クラスで定義されたメソッドのみにアクセスできます。 Cat サブクラスの getColor() など、サブクラスに固有のメソッドにアクセスするには、変数をサブクラス型として明示的に宣言するか、変数をその型にキャストする必要があります。
具象型へのキャスト
変数を具体的なサブクラス型として宣言するには、変数を次のように変更します。
Cat cat = new Cat("Feline", 12, "Orange"); cat.getName(); // OK, getName() is part of Cat (and the superclass) cat.getColor(); // OK, getColor() is part of Cat
これで、変数 cat は getColor() を含む Cat クラスのすべてのメソッドにアクセスできるようになります。
動作中の変数キャスト
正確なサブクラスがわからない場合は、変数を具象型にキャストすることもできますtype:
Pet pet = new Cat("Feline", 12, "Orange"); Cat cat = (Cat)pet; cat.getName(); // OK cat.getColor(); // OK
キャストすると、変数を正確なサブタイプとして宣言しなくても、指定したサブクラスのメソッドにアクセスできます。
メソッドの結合
最初にスーパークラス型の変数を宣言し、次にそれを具体的な変数にキャストすることで、2 つのアプローチを組み合わせることもできます。 type:
Pet pet = new Cat("Feline", 12, "Orange"); Cat cat = (Cat)pet; cat.getName(); // OK cat.getColor(); // OK
これらの手法を利用すると、変数の型指定による制限を回避したり、サブクラスに固有のメソッドにアクセスしたりでき、継承の力を最大限に活用できます。
以上が継承でスーパークラス変数からサブクラス メソッドにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。