java - 如何从超类对象调用子类方法
问题描述
假设我有这个父类
public abstract class Parent
{
private String name;
private String surname;
public Parent(String name, String surname)
{
this.name=name;
this.surname=surname;
}
让我们假设我有很多这样的子类,他们每个人都有自己不同的属性可以添加到他们的父类中
public class Child extends Parent
{
private String favColor;
public Child(String name,String surname,String favColor)
{
super(name,surname);
this.favColor=favColor;
}
public getFavColor()
{
return this.favColor
}
现在我处于这种情况
Parent parent = new Child(name,surname,favColor);
我想做的是像这样在对象父对象上调用方法getFavColor()
parent.getFavColor();
这管用吗?我猜不是,那么我怎么能在这样的对象上调用这样的方法呢?我想过在超类上声明子类属性的抽象获取器,但这听起来不太容易遵循开放/封闭原则,因为在将来我想要添加更多类似子类的类时,我将不得不声明每个超类中子属性的获取者不应该知道他的孩子。
非常感谢您 :)
解决方案
在这种情况下,您不能调用 getFavColor() 方法。该方法仅在子类中定义,您的参考是父类。为此,必须在父类中定义 getFavColor() 方法。您将在 Parent 类中创建一个抽象方法 fav():
public abstract class Parent
{
private String name;
private String surname;
public Parent(String name, String surname)
{
this.name=name;
this.surname=surname;
}
public abstract String fav();
}
所谓:
parent.fav();
因此,您可以在您的孩子身上以不同的方式实现该方法,例如:
public class Child extends Parent
{
private String favColor;
public Child(String name,String surname,String favColor)
{
super(name,surname);
this.favColor=favColor;
}
public String fav()
{
return this.favColor;
}
}
和:
public class SecondChild extends Parent
{
private String favSport;
public Child(String name,String surname,String favColor)
{
super(name,surname);
this.favColor=favColor;
}
public String fav()
{
return this.favSport;
}
}
仅当所有子方法的签名都相等时才使用此方法(在您的情况下,如果所有子方法都返回一个字符串)。
推荐阅读
- c++ - C ++如何找出函数是成员还是非成员。换句话说,“this”指针可用
- javascript - JavaScript 在选择器中定位多个类
- flutter - 在 PageView 中使用 SingleChildScrollView
- python - 在 OpenCV 中将 RGBA 渐变添加到 RGB 图像
- html - 如何最小化要在移动设备上设置的图像
- c# - 关于简单认证和授权系统的问题
- ios - Flutter:如何使用flutter_messaging插件在ios上显示丰富的通知?
- java - Java:无法在 timestamp.HBASE api 处执行列族删除
- monaco-editor - 将 OCaml 中定义的自定义语言添加到 Monaco Editor
- bluetooth - 蓝牙已连接但启动时无法使用