簡體   English   中英

我可以覆蓋使用子類對象作為Java中的參數嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM