黑马程序员---内部类

---------------------- android培训java培训、期待与您交流! ----------------------

内部类

内部类——在类中直接定义的的内部类

        嵌套类可以直接访问嵌套它的类的成员,包括private成员,但是嵌套类的成员却不能被嵌套它的类直接访问。

在内部类对象保存了一个对外部类对象的引用,当内部类的成员方法中访问某一变量时,如果在该方法和内部类中都没有定义过这个变量,内部类中对this的引用会被传递给那个外部类对象的引用。

class Outer {
    int outer_i = 100;
    void test() {
        Inner in = new Inner();
        in.display();

    }
    class Inner {
         void display() {
                System.out.println("display: outer_i = " + outer_i);
       }
    }
}
class InnerClassDemo {
        public static void main(String[] args) {
            Outer outer = new Outer();
            outer.test();
        }
}

 

       首先在display方法中查找outer_i 如果没有就到inner 对象中查找,如果还是没有就会通过outer.this 传递到外部对象Outer中查找。

       如果用static修饰一个内部类,这个类就相当于是一个外部定义的类,所以static的内部类中可声明static成员,但是,非static的内部类中的成员是不能声明为static的。static的内部类不能再使用外层封装类的非static的成员变量,这个道理不难想象!所以static嵌套类很少使用。 

        如果函数的局部变量(函数的形参也是局部变量),内部类的成员变量,外部类的成员变量重名,我们应该按下面的程序代码所使用的方式来明确指定我们真正要访问的变量。 

public class Outer {
             private int size;
             public class Inner {
                  private int size;
                  public void doStuff( int size) {
                         size++; // 引用的是doStuff函数的形参
                 this.size++; //引用的是Inner类中的成员变量
                 Outer.this.size++; // 引用的Outer类中的成员变量
           }
    }
}


内部类如何被外部引用 ?

class Outer { 
        private int size =1; 
        public class Inner {      
                private int size = 2; 

                public void doStuff( int size) {     
                        System.out.println(size++); // 引用的是doStuff函数的形参
                        System.out.println(this.size++); //引用的是Inner类中的成员变量
                        System.out.println(Outer.this.size++); // 引用的Outer类中的成员变量
                }
        }

}
public class Test  {
public static void main(String[] args) {
            Outer outer= new Outer();
            Outer.Inner inner = outer.new Inner();//创建内部类对象
            inner.doStuff(10);
    }


}


引用内部类中的方法时,必须先在外部类中new一个外部类对象。让后再创建内部类对象。

内部类——在类的方法中定义的的内部类

/**
测试方法中定义的内部类,是否可以访问方法中的局部变量? 答案是可以的 但是方法中的局部变量是定义为final
*/
class Outer {
    int outer_i = 100;
    void test() {
        final String str = "true";
        class Inner {
            void display() {
                System.out.println("display: outer_i = " + outer_i);
                System.out.println("方法中定义的内部类是否可以访问方法的局部变量? answer is " + str);
            }
        }

        Inner in = new Inner();
        in.display();
    }

}
class TestMethodClass {
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.test();
    }
}

 ---------------------- android培训java培训、期待与您交流! ----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值