Может ли класс, расширенный из другого класса, использовать тот же метод с другим типом возвращаемого значения? - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть абстрактный класс с именем parcel.

public abstract class Parcel implements Serializable {    
    public String type;
    public String comm;

    //The type is different for different extensions of this class, but I can't put two different types?
    public abstract void getData();

}

У меня есть два класса, которые расширяют этот класс, это первый класс ...

public class singleParcel extends Parcel {

    private String info;

    public singleParcel(String comm, String infoStr) {    

        this.info = infoStr;
        super.type = "single";
        super.comm = comm;
    }    

    //This is ideally what I would like to do in this class
    public String getData() {
        return info;
    }

}

Вот второй класс ..

public class BigParcel extends Parcel {
    private ArrayList<Stuff> arrayOfStuff;

    public BigParcel(String comm, ArrayList<Track> arrayL) {
        this.arrayOfStuff = arrayL;
        super.type = "big";
        super.comm = comm;
    }

//This is ideally what I would like to do in this one
    public ArrayList<Stuff> getData() {
        return arrayOfStuff;
    }
}

Не уверен, возможно ли это вообще? Причина, по которой я хотел бы, чтобы моя посылка была абстрактным классом, заключается в том, что я работаю с подключением к серверу. Я хотел бы, чтобы был пакет, через который я мог бы отправить какую-то отдельную часть информации, и один, который я мог бы отправить ArrayList. То, что придет, будет посылкой любого типа.

Ответы [ 2 ]

3 голосов
/ 01 апреля 2020

Возможно, вам потребуется генерировать базовый класс.

public abstract class Parcel<T> implements Serializable {    
    public abstract T getData();

public class singleParcel extends Parcel<String> {

public class BigParcel extends Parcel<List<Stuff>> {

В качестве альтернативы вы можете использовать ковариантные типы возвращаемых данных, но базовый тип не будет таким полезным.

public abstract Object getData();
0 голосов
/ 01 апреля 2020

Как правило, это невозможно. С синтаксической точки зрения сигнатура метода - это имя метода и параметры (их типы). Поэтому возвращаемый тип должен быть совместимым.

...