[英]Why instance variable with default access modifier can't be found in subclass?
[英]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.