如何使用新对象覆盖父类?

时间:2014-12-29 14:33:23

标签: java

我试图通过类ParentMessage生成自定义XML消息,但我没有 知道如何覆盖字段和方法。

对于这个问题,有3个课程。

1 - ParentMessage (源代码核心),我无法访问代码。

2 - ChildMessage (我的类核心),我需要通过创建ParentMessage的新对象覆盖 ParentMessage类。

3 - Main (客户端类),使用ChildMessage的字段和方法。

感谢您的帮助。

abstract class ParentMessage extends Packet {
    // this is source code, current fields library , I can't Change the method or have access to these fields.
    public String element  =  "message"; 
    public String type       =  "email";    
    public String body      =  ""; 
    public String phone    =  ""; 
    public String from      =  "";
    public String to          =  "";


    pubilc void sendMessage(String element, String type, String body){
        // this current method library , I can't Change the method
        //build xml format
        //send message

        //example of format XML message
        //<message to='rotem@example.com/LIB'>
        //      <from>bob@example.com/LIB</from>
        //      <type>email</type>
        //      <body>some text body</body>
        //</message>
    }
}

//

abstract class ChildMessage {
        // this my class I want to override the ParentMessage Fields and methods 
        // and make here the change code.

        //example of custom XML message

    public String element       =  "rootmessage";    //override the field
    public String element2       =  "element2";          //I add new field       
    public String element3     =  "element3";           //I add new field       
    public String type            =  "web";                 //override the field
    public String body2          =   "body2";            //I add new field       
    public String body3          =   "body3";             //I add new field       

    public ParentMessage parentMessage = new ParentMessage();

    pubilc void sendMessage(String type, String body, String body2, String body3){

            //<rootmessage to='rotem@example.com/LIB'>
        //      <from>bob@example.com/LIB</from>
        //      <type>web</type>
        //      <body>some text body</body>
        //      <element2>
        //          <body2>some text body2</body2>
        //      </element2>
        //      <element3>
        //          <body3>some text body3</body3>
        //      </element3>
        //</rootmessage>

        //send message
    }
}

//

public class Main {

    // client class
    public String from           =  "bob@example.com/LIB";
    public String to             =  "rotem@example.com/LIB";
    public String type            =  "android";
    public String body           =  "some text body"; 
    public String body2          =   "some text body2";
    public String body3          =   "some text body3";

    public static void main( String ... args ) {

        public ChildMessage childMessage = new ChildMessage();
        childMessage.sendMessage (type, body, body2, body3){};
    }

}

3 个答案:

答案 0 :(得分:0)

首先,为了覆盖类的方法,您的类必须扩展该类:

abstract class ChildMessage extends ParentMessage

其次,字段不能被覆盖。只有方法可以。

答案 1 :(得分:-1)

一个非常简单的例子:

public abstract class Test1 {
    public String element  =  "message0"; 
    public String element1  =  "message1";
}

public class Test2 extends Test1{
    public String element  =  "message2"; 

    public void printMe() {
        System.out.println(element);
        System.out.println(element1);
    }
}

你会看到它会打印出来: 消息2 MESSAGE1

如果仍然不清楚,请告诉我

答案 2 :(得分:-2)

要覆盖方法,您需要具有完全相同的签名。

此:

public void sendMessage(String type, String body, String body2, String body3);

不会覆盖此:

public void sendMessage(String element, String type, String body);

因为前者接受4个参数而后者只接受3.如果要覆盖该方法,则必须删除最后一个参数,以便两者都接受3个字符串。

(但是,既然你要为这个函数添加新的参数,很可能你并没有真正重写它,而是完全改变了这个行为。不幸的是我无法真正帮助你,因为我不确切地知道你是什么做)