Java:创建一个子对象,它将从父对象继承父属性

时间:2015-09-25 01:42:44

标签: java inheritance

我是继承属性的新手。

我们创建了一个对象“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);

      }

}

在秒的情况下..我更改子对象字段,打印父对象时显示相同的更改。

1 个答案:

答案 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();

您收到错误的行会成功。