更新時間:2020-08-27 15:57:51 來源:動力節點 瀏覽2567次
非靜態類
兩者都是非靜態類可以互相訪問,內部類訪問外部類沒有疑問,就像是一個方法(這里只內部類)訪問類中的變量一樣;但是,外部類的成員也可以訪問內部類的內容,但是親測必須實例了這個內部類才可以使用(具體原因去查大佬們寫的博客)。
方法外只能對定義的變量賦值,不可對游離變量賦值(功底弱):
錯誤示例:
注:突發奇想那一個類里面的方法定義的私有變量類可以訪問到嗎,然后發現方法里不能加權限作用域。
上代碼:
package?com.it.demo03;
?
public?class?MyTest1?{
?
????private?String??s?=?"yyy";
?
?????class?Inner{
????????private?String??u?=?"uuu";
????????public?Inner(){
????????}
????????public?void?gets(){
????????????System.out.println(s);
????????}
????}
?
????public?void?getu()?{
?????????Inner?inner?=?new?Inner();
????????System.out.println(inner.u);
????}
/*
????//方法中內部不不能加權限作用域,方法里面定義的變量是只能方法使用局部變量
????public?void?virtuainner(){
????????private?String?vin?=?"vin";
????}
????*/
}
class?Test2{
????public?static?void?main(String[]?args)?{
????????MyTest1?myTest1?=?new?MyTest1();
????????MyTest1.Inner?inner?=?myTest1.new?Inner();
????????inner.gets();
????????myTest1.getu();
????}
}
靜態類:
效果相似:
package?com.it.demo03;
public?class?MyTest2?{
private?static?String??s?=?"yyy";
static?class?Inner{
private?static?String??u?=?"uuu";
public?Inner(){
}
public?static?void?gets(){
System.out.println(s);
s?=?"us";
}
}
public?static?void?getu()?{
//????????Inner?inner?=?new?Inner();
//????????System.out.println(inner.u);
System.out.println(Inner.u);
}
}
class?Test3{
public?static?void?main(String[]?args)?{
MyTest2.getu();
MyTest2.Inner.gets();
}
}
靜態內部類實現單例模式:
pacpackage?com.it.demo02;
?
public?class?SingletonDemo05?{
????private?volatile?static?SingletonDemo05?singletonDemo05?=?null;
????public?static?void?getsd(){
????????System.out.println("getsd:"+singletonDemo05);
????}
????private?SingletonDemo05(){}
????private?static?class?Inner{
????????public?static?SingletonDemo05?getSD(){
????????????if(singletonDemo05?==?null){
????????????????synchronized?(SingletonDemo05.class){
????????????????????if?(singletonDemo05?==?null)
????????????????????????singletonDemo05?=?new?SingletonDemo05();
????????????????}
????????????}
????????????return?singletonDemo05;
????????}
????}
????public?static?SingletonDemo05?getSingletonDemo05(){
????????return?Inner.getSD();
????}
}
?
class?Test4{
????public?static?void?main(String[]?args)?{
????????SingletonDemo05.getsd();
????????SingletonDemo05?singletonDemo05?=?SingletonDemo05.getSingletonDemo05();
????????SingletonDemo05?singletonDemo051?=?SingletonDemo05.getSingletonDemo05();
????????System.out.println(singletonDemo05?==?singletonDemo051);
?
????????SingletonDemo05.getsd();
????????System.out.println(singletonDemo05.hashCode());
????????System.out.println(singletonDemo051.hashCode());
????}
}
以上就是動力節點java培訓機構的小編針對“記錄Java內部類的訪問權限問題”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習