繁体   English   中英

如何从超类对象调用子类方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM