我是继承属性的新手。
我们创建了一个子对象“obnewChild”,它继承了父对象的父属性,“obParent”。
主程序将使用 Child 对象“obnewChild”并操纵从Parent继承的字段及其自己的字段。
最后 - 输出将是JSON格式的父对象,“obParent” ..使用程序运行中字段的更新值。
(从程序角度来看 - Child对象具有瞬态字段 - 为每个父对象创建 - 在运行期间在主程序中使用。期望对Child对象的任何更改也将显示在Parent中对象..从中继承它)
测试程序如下所示。它不适用于当前格式。
以上可以优雅地完成吗?在Java中执行此操作的好方法是什么。
感谢您的帮助。
ALT
// *********** //新计划
public class Inheritance {
public static void main(String[] args) {
Parent obParent = new Parent();
Child obChild = new Child();
//================
obParent.setVariables();
obParent.parentMethod();
//================
obChild.parentMethod();
obChild.childMethod();
obChild.childParentMethod();
//================
Child obnewChild = (Child) obParent; //Error
}
}
public class Parent {
String varA = "A";
String varB = "B";
public void parentMethod(){
System.out.println(varA + " " + varB);
}
public void setVariables(){
this.varA = "X";
this.varB = "Y";
}
}
public class Child extends Parent {
String varC = "C";
String varD = "D";
public void childMethod(){
System.out.println( varC + " " + varD);
}
public void childParentMethod(){
System.out.println(super.varA + " " + super.varB + " " + this.varC + " " + this.varD);
}
}
输出:
public class Inheritance {
public static void main(String[] args) {
//================
Parent obParent = new Parent();
obParent.setVariables();
obParent.printParent();
//================
Child obnewChild = new Child(obParent);
obnewChild.printChildAndParent();
obnewChild.setVariables();
obnewChild.printChildAndParent();
//================
obParent.printParent();
//================
}
}
public class Parent {
String varA = "A";
String varB = "B";
public void printParent(){
System.out.println(varA + " " + varB);
}
public void setVariables(){
this.varA = "X";
this.varB = "Y";
}
}
public class Child {
Parent obParent = new Parent();
String varC = "C";
String varD = "D";
public Child(){
}
public Child(Parent obParent){
System.out.println( obParent.varA + " " + obParent.varB);
this.obParent = obParent;
}
public void setVariables(){
this.obParent.varA = "XYZ";
this.obParent.varB = "ABC";
}
public void printChild(){
System.out.println( varC + " " + varD);
}
public void printChildAndParent(){
System.out.println(obParent.varA + " " + obParent.varB + " " + this.varC + " " + this.varD);
}
}
在秒的情况下..我更改子对象字段,打印父对象时显示相同的更改。
答案 0 :(得分:0)
您遇到ClassCastException,因为您尝试强制转换为Child的对象实际上并不是子对象。但是,如果在
之后添加一些行,您应该能够看到子项可以操作它从父项继承的字段。 //================
obChild.parentMethod();
obChild.childMethod();
obChild.childParentMethod();
//================
所以它读取
//================
obChild.parentMethod();
obChild.childMethod();
obChild.childParentMethod();
obChild.setVariables(); // set the values of fields inherited from the parent
obChild.childParentMethod(); // print and observe the values have changed
//================
如果你想在这种情况下进行转换,你可以将Child对象转换 - 或实际上只是分配 - 给父对象。
如果要在出现错误的行中避免错误,还可以更改obParent的构造,使其实际上是Child对象。如果你写了
Parent obParent = new Child();
您收到错误的行会成功。