![](/img/trans.png)
[英]A java method that has a generic parameter- why can't I pass an object with a generic parameter that is a subclass of the method arguments?
[英]Can I override using subclass object as parameter in Java?
我的課程如下
public class Useful
{
public void f(Object a)
{
System.out.println("In base f");
}
public void g(String a)
{
System.out.println("In base g");
}
}
public class MoreUseful extends Useful
{
public void f(String a)
{
System.out.println("In derived f");
}
public void g(Object a)
{
System.out.println("In derived g");
}
}
我試圖覆蓋基類方法,但我正在更改派生類中的參數。 在方法MoreUseful.f()中我使用子類參數(String)作為基類中的Object。 在方法MoreUseful.g()我使用超類參數(Object)作為基類中的String。
是否可以覆蓋這些方式? 以上兩種情況中的哪一種都是正確的重寫?
不,這是不可能的,並且會違反LSP 。
通過從一個類繼承,你表達你的子類MoreUseful
實際上是一個Useful
,因此暴露了所有功能 Useful
自曝。 如果你刪除了用對象調用f
的能力,你就會違背這個承諾。
您可以自由地重載 f
以便您擁有f(String s)
方法。
確實覆蓋了g()
方法。 但是, f()
不會被覆蓋 - 它被重載了 。 驗證這一點的一種簡單方法是在要@Override
的每個方法上添加@Override
- 如果它導致編譯錯誤,則表明您沒有正確覆蓋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.