将子对象向下转换为父对象,使其仅具有父属性

0 java

我有两个课程:ChildParentChild延伸Parent。我创建了一个Child对象并设置了所有参数,Child即 的参数以及 的参数Parent

现在在运行时我想要一个Parent仅具有Parent类属性的对象。示例类是

public class Parent {

    private String lastName;

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    @Override
    public String toString() {
        return "Parent [lastName=" + lastName + "]";
    }

}
public class Child extends Parent{

    private String firstName;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    @Override
    public String toString() {
        return "Child [firstName=" + firstName + ", getLastName()="
                + getLastName() + "]";
    }


}
public class TestExtension {


    public static void main(String arg[])
    {
        Child child = new Child();
        child.setFirstName("fist name");
        child.setLastName("last name");
        Parent parent = new Parent();
        parent = (Parent) child;
        System.out.println(child);
        System.out.println(parent);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是

Child [firstName=fist name, getLastName()=last name]
Child [firstName=fist name, getLastName()=last name]
Run Code Online (Sandbox Code Playgroud)

我想要得到的预期输出:

Child [firstName=fist name, getLastName()=last name]
Parent [LastName=last name]
Run Code Online (Sandbox Code Playgroud)

Kay*_*man 5

铸造不是转换。该对象始终是 a Child,无论您将其存储在Parent引用还是Object引用中。任何呼叫toString()都会呼叫Child.toString(),你无法阻止。

您唯一的选择是创建一个方法来Child创建Parent对象并将数据复制到其中(并返回它)。那或者改变你的要求。

您也不是向下转型,而是向上转型,并且不需要显式转换为(Parent).