1. 程式人生 > >java內部類和外部類相關訪問總結

java內部類和外部類相關訪問總結

內部類的作用:

  1. 內部類可以很好的實現功能隱藏,可以新增private、protected等許可權控制
  2. 可以避免修改介面而實現同一個類中兩種同名方法的呼叫
  3. 可是實現多重繼承(重要)

內部類和外部類相互呼叫方式:

一:非靜態內部類

內部類呼叫外部類

  • 1.非靜態內部類,不能存在靜態方法
  • 2.非靜態方法,呼叫外部類的非靜態方法、靜態方法都可以直接呼叫

外部類呼叫內部類

  • 1.非靜態方法,呼叫內部的非靜態方法 new Inner().innerMethod();
  • 2.靜態方法,呼叫內部類的非靜態方法 new Outer().new Inner().innerMethod();

二:靜態內部類

內部類呼叫外部類

  • 1.非靜態、靜態方法,呼叫靜態方法直接呼叫
  • 2.非靜態、靜態方法,呼叫非靜態方法 new Outer().outMethod();

外部類呼叫內部類

  • 1.非靜態、靜態方法,呼叫非靜態方法 new Outer.StaticInner().innerMethod();
  • 2.非靜態、靜態方法,呼叫靜態方法 Outer.StaticInner.innerStaticMethod();

**示例程式碼

public class Outer {
    private void outMethod(){
        System.out.println("i am out non-static method");
        new Inner().innerMethod();
        new Outer.StaticInner().innerMethod();
        Outer.StaticInner.innerStaticMethod();
    }
    private static void outStaticMethod(){
        System.out.println("i am out static method");
        new Outer().new Inner().innerMethod();
        new Outer.StaticInner().innerMethod();
        Outer.StaticInner.innerStaticMethod();
    }
    class Inner{
        private void innerMethod(){
            System.out.println("i am inner non-static method");
            outMethod();
            outStaticMethod();
        }


//        //error non-static class canot have static cmethod
//        private static void innerStaticMethod(){
//            System.out.println("i am inner static method");
//        }
    }
    static class StaticInner{
        private void innerMethod(){
            System.out.println("i am staticinner non-static method");
            outStaticMethod();
            new Outer().outMethod();
        }

        private static void innerStaticMethod(){
            System.out.println("i am staticinner static method");
            outStaticMethod();
            new Outer().outMethod();