从超类访问子类方法
在面向对象编程中,继承允许类从其父类继承属性和行为。但是,当从超类变量访问子类的方法时,会出现一些限制。
考虑以下代码片段:
abstract public class Pet { ... } public class Cat extends Pet { private String color; public String getColor() { ... } } public class Kennel { public static void main(String[] args) { Pet cat = new Cat("Feline", 12, "Orange"); cat.getColor(); // Compiler error: getColor() not defined in Pet } }
在 Kennel 类中,当将 Cat 对象分配给Pet变量,只有Pet中定义的成员可以访问。这包括 getName() 和 getAge() 等方法,但不包括 getColor()。
要解决此问题,有两个选项:
1。将变量声明为子类:
将变量声明为特定子类:
Cat cat = new Cat("Feline", 12, "Orange"); cat.getColor(); // Valid, getColor() is defined in Cat
2.将变量转换为子类:
将变量转换为已知或预期的子类:
Pet cat = new Cat("Feline", 12, "Orange"); ((Cat)cat).getColor(); // Valid, getColor() is accessible via casting
示例实现:
这里是Kennel 类的修正版本:
public class Kennel { public static void main(String[] args) { Cat cat = new Cat("Feline", 12, "Orange"); System.out.println("Cat's color: " + cat.getColor()); } }
以上是在 Java 中如何从超类变量访问子类方法?的详细内容。更多信息请关注PHP中文网其他相关文章!