簡體   English   中英

有什么方法可以禁止子類在Java中調用父類的公共方法?

[英]Is there any way to forbid the son class to call the public method of super class in java?

有什么方法可以禁止子類在Java中調用父類的公共方法?

例如

public abstract class TObject{
    abstract public void quark();
}


public class Animal extends TObject{

       public void quark(){
           System.out.println("this is the animal");
       }

}

public class Dog extends Animal{
       @overide
       public void quark(){
           System.out.println("this is the animal");
           **super.quark();**
       }
} 

In this example, The Dog call the **super.quark();** in it's quark method.

但是我不希望狗可以調用super.quark(); 而且我也不想更改

將“動物”中的誇克方法修改為私有。 有什么辦法可以防止編譯?

幾天我很困惑,誰能幫助我.......

我這樣做的原因是我在開發hudson scm插件時遇到了類似的問題。

創建了擴展SubversionSCM的類(正式類)。 我只是想

覆蓋超類的公共方法,然后像

例。 但是編譯產生了錯誤。我不知道為什么,怎么辦? 劑量java有

類似反射方式來防止這種情況?

不,根據public的定義,您不能阻止該方法的調用(無論是從派生類還是在其他任何地方)。 您當然可以通過將其設為final來阻止其被覆蓋 (從而確保用於調用它的語法不會使用super ;-)。

不,沒有辦法擁有子類無法調用的公共方法。 您能做的最好的就是記錄此建議。

注意,它稱為子類或子類。

其他兩個答案( 亞歷克斯馬修)基本上是正確的。

  1. 您可以防止子類從超類調用公共方法
  2. 如果這樣做,您的設計可能存在問題。

下面的父親類具有兩個名為父親方法的公共方法。 子類可以使用反射調用父親方法(謝謝馬修指出)。如果不使用反射,子類可能無法調用任何父親方法。 因此,它與私有方法非常相似。

class Father
{
    private class Alpha { }

    private class Beta { }

    public void fatherMethod ( Alpha param )
    {
    }

    public void fatherMethod ( Beta param )
    {
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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