首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 每日一題:靜態方法能否存取非靜態內部類別?(20170307)

     編輯:Java 相關知識

題目代碼

public class Ques0307 {
    private String s1 = "Ques0307 string";
    class InnerClass {
        private String s2 = "inner string";
        public void innerMethod() {
            System.out.println(s1);
            System.out.println(s2);
        }
    }
    public static void outerMethod() {
        Ques0307.InnerClass inner = new Ques0307().new InnerClass();
        inner.innerMethod();
    }
    public static void main(String[] args) {
        outerMethod();
    }
}

問題

主程式能否正常運行輸出結果?

答案:能,正常輸出

Ques0307 string
inner string

解析

  1. InnerClass 是**非靜態內部類** (成員內部類),實例化語法:new Outer().new Inner()。
  2. 在靜態方法 outerMethod 中,先建立外部類實例 new Ques0307(),再用該實例建立內部類 .new InnerClass(),完全合法。
  3. 內部類方法 innerMethod 可直接存取外部類實例欄位 s1 (即使 private) 及自身欄位 s2。

常見誤區

  • 以為靜態方法不能存取非靜態內部類 → **錯**;靜態方法不能**直接**存取非靜態成員,但可透過**建立外部實例**間接存取。
  • 若內部類宣告為 static (巢狀類),則無需外部實例即可 new Outer.Inner()。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved