Java では、クラスを継承してサブクラスを作成するときに、サブクラス固有のメソッドへのアクセスで問題が発生することがよくありますスーパークラス内から。これは、サブクラス オブジェクトをインスタンス化し、それをスーパークラス変数に割り当てるときに発生します。
この制限を解決するには、次のいずれかの方法を使用できます:
Cat cat = new Cat("Feline", 12, "Orange"); cat.getName(); // OK cat.getColor(); // OK (getColor() is in Cat)
Pet pet = new Cat("Feline", 12, "Orange"); ((Cat)pet).getName(); // OK ((Cat)pet).getColor(); // OK (explicitly treated as Cat)
を実行するときキャストの場合、オブジェクトを一時的に指定された型のインスタンスとして扱います。これにより、サブクラス固有のメンバーとメソッドにアクセスできるようになります。
次の変更された Main クラスについて考えてみましょう:
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 サイトの他の関連記事を参照してください。