0 java
我有两个课程:Child和Parent。Child延伸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)
铸造不是转换。该对象始终是 a Child,无论您将其存储在Parent引用还是Object引用中。任何呼叫toString()都会呼叫Child.toString(),你无法阻止。
您唯一的选择是创建一个方法来Child创建Parent对象并将数据复制到其中(并返回它)。那或者改变你的要求。
您也不是向下转型,而是向上转型,并且不需要显式转换为(Parent).