導(dǎo)語
封閉性與訪問控制權(quán)限是有直接聯(lián)系的。
主要內(nèi)容
- Java訪問控制權(quán)限
具體內(nèi)容
在Java里面一共支持四種控制權(quán)限鹦牛。public讹语、protected钙皮、default、private,而這四種訪問控制權(quán)限特點:
No. | 范圍 | private | default | protected | public |
---|---|---|---|---|---|
1 | 在同一個類中 | √ | √ | √ | √ |
2 | 在同一包的不同類 | √ | √ | √ | |
3 | 在不同包的子類 | √ | √ | ||
4 | 在不同包的非子類 | √ |
除了public之外短条,對于封裝可以使用private导匣、protected、default茸时,只不過一般不會去考慮使用default贡定。
重點來看protected這種權(quán)限。它直接與包的定義有關(guān)可都。
protected訪問權(quán)限
protected訪問權(quán)限缓待,它直接與包的定義有關(guān)。
范例:protected訪問權(quán)限
定義cn.mldn.demoa.A類
package cn.mldn.demoa;
public class A {
protected String info = "Hello";
}
定義cn.mldn.demob.B類
package cn.mldn.demob;
improt cn.mldn.demoa.A;
public class B extends A { // 是A不同包的子類
public void print() {
System.out.println("A類中的info = " + super.info)
}
}
定義Test類
package test;
improt cn.mldn.demob.B;
public class Test {
public static void main(String args[]) {
new B().print();
}
}
輸出結(jié)果:
A類中的info = Hello
B中的print()方法會輸出A類中的info屬性汹粤。
Test類直接去輸出A類中的info屬性(錯誤代碼)
package test;
improt cn.mldn.demoa.A;
public class Test {
public static void main(String args[]) {
A a = new A();
System.out.println(a.info);
}
}
編譯會出錯命斧,由于Test與A類不在同一個包,并且沒有繼承關(guān)系嘱兼,所以是無法訪問protected屬性的。
總結(jié)
Java的封裝性是以private贤徒、protected芹壕、default三種權(quán)限的定義。