[英]How to Call a Subclass Method From a SuperClass Object
假设我有这个父类
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();
这管用吗? 我想不是,那么我怎么能在这样的对象上调用这样的方法呢? 我想在超类上声明孩子属性的抽象吸气剂,但这听起来不太容易遵循开放/封闭原则,因为在将来我想要添加更多类似孩子的类时,我将不得不声明每个超类中的 child 属性的 getter 不应该知道他的孩子的。
非常感谢您 :)
你需要一个abstract
方法来做到这一点。 你的父母已经很abstract
所以很好。 它会是这样的:
public abstract class Parent {
private String name;
private String surname;
public Parent(String name, String surname) {
this.name = name;
this.surname = surname;
}
public void showFavColor() {
system.print.ln(this.getFavColor());
}
abstract string getFavColor();
}
public class Child extends Parent {
private String favColor;
public Child(String name, String surname, String favColor) {
super(name, surname);
this.favColor = favColor;
}
@Override
public String getFavColor() {
return this.favColor
}
}
父级的每个子级都必须扩展抽象函数。 由于该函数在技术上是在父级中声明的,因此可以从中访问它。
这意味着,你可以做
Parent parent = new Child(name,surname,favColor);
parent.showFavColor();
在这种情况下,您无法调用 getFavColor() 方法。 该方法仅在 Child 类中定义,您的引用是 Parent。 为此,需要在父类中定义 getFavColor() 方法。 您将在父类中创建一个抽象方法 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;
}
}
仅当所有子项中的方法签名都相等时才使用此方法(在您的情况下,如果所有子项方法都返回一个字符串)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.