簡體   English   中英

我們可以在子類中修改父成員變量或方法的訪問修飾符嗎?

[英]Can we modify the access modifier of the parent member variable or method in the subclass?

看到有人寫:

可以修改子類中受保護成員的可見性。

然后我很困惑,我知道父 class 中方法的訪問修飾符可以在其實現中進行修改,見下文:

class Parent {
    protected void m1(){}
}

class SubClass extends Parent {
    
    @Override
    public void m1() {
        super.m1();
    }
}

但是我不知道如何在子類中將成員變量的受保護訪問修飾符修改為public。 代碼實現是什么樣的?

訪問修飾符可以在子 class 中更改,但有一些必須遵循的規則 -

java 中有四種類型的訪問修飾符:

Default – No keyword required
Private
Protected
Public

使用訪問修飾符覆蓋方法 在使用訪問修飾符進行方法覆蓋時,它們只是一個規則,即

規則:如果你重寫任何方法,被重寫的方法(即在子類中聲明)不能有更多限制。

按降序排列的訪問修飾符限制:

private
default
protected
public

即私有比默認更受限制,默認比受保護更受限制,依此類推。

我們可以通過應用訪問修飾符來更改子類中字段、構造函數、方法的訪問級別。

例子:

class Parent {
     private void m1(){}
     void m2(){}
     protected void m3(){}
     public void m4(){}
}

class SubClass extends Parent {
    /*
    @Override
    private void m1() {  super.m1(); }  // not allow any modifier shows compile time error
    */
    @Override
    void m2() {  super.m2(); }       // allow default, protected, public only
    @Override
    protected void m3() {  super.m3();  } // allow protected, public only
    @Override
    public void m4() {  super.m4();  }    // allow public only
}

暫無
暫無

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

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