我想問你為什么@Override在這種情況下使用會產生錯誤“ Method does not override method from its superclass”?為什么我不能使用實作介面的類的實體作為引數并回傳由同一介面定義的方法的型別?
public interface Request {
//....
}
public interface Response {
//....
}
public class MyRequest implements Request {
//....
}
public class MyResponse implements Response {
//....
}
public interface Order {
Response cancel(Request request);
}
public class MyOrder implements Order {
@Override
public MyResponse cancel(MyRequest request) {
return null;
}
}
uj5u.com熱心網友回復:
以下方法不起作用——但繼承要求它必須這樣做。
class MyOtherRequest implements Request { ... }
MyOrder myOrder = new MyOrder();
Order order = myOrder; // okay because myOrder is a subtype of Order
order.cancel(new MyOtherRequest()); // unimplemented!
因此,子型別的方法必須接受超型別的方法可以接受的所有可能值——而不僅僅是一個子集。
uj5u.com熱心網友回復:
問題在于要取消的引數。
public MyResponse cancel(MyRequest request) {
return null;
}
您不能將 a 傳遞supertype給 a subtype(在這種情況下Request,將物件傳遞給MyRequest引數),因為 的實作subType可能具有superType介面不知道的其他方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/524588.html
標籤:爪哇哎呀
上一篇:如何訪問類物件的屬性?
