首页 > Java > java教程 > 在 Java 中如何从超类访问子类方法?

在 Java 中如何从超类访问子类方法?

Barbara Streisand
发布: 2024-12-07 10:04:12
原创
693 人浏览过

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

从超类调用子类方法

问题

在Java中,继承类和创建子类时,经常会遇到访问子类特定方法的问题来自超类内部。当您实例化子类对象并将其分配给超类变量时,就会发生这种情况。

解决方案

要解决此限制,您可以使用以下方法之一:

  • 将变量声明为派生变量class:
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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板