黑马程序员---java内部类

来源:互联网 发布:横截面数据eview 编辑:程序博客网 时间:2024/06/06 09:10

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------



。内部类的对象不能单独存在,必须依赖一个其外层类的对象


。定义在 类内部,方法体、语句块 之外的 非static类 称为普通内部类, 定义在 方法体,语句块 内的类称为局部类


。使用static declared 内部类属于外部类本身,而不是属于外部类的某个对象,访问该 static inner class 使用 外部类.内部类 的格式
static 内部类可以包含 static 成员,也可以包含 非static 成员, static内部类 不能访问外部类的实例成员 即使是 static 内部类的实例方法


。内部类可以直接访问外部类的成员,包括 private 修饰的, 外部类要访问内部类,必须建立内部类对象


。内部类可以被 private、protected 修饰,可以声明为 abstract,可以被其他的内部类继承,也可以声明为 final

。在方法中定义的内部类,如果想在内部类中访问方法中的local variable,则方法中的 “l v” needs to be declared final

。非static 内部类里可以直接访问外部类的 private 成员,非static 内部类实例必须寄存在外部类实例里,非static 内部类里
不能定义 static 成员


。interface 里的内部类 默认使用 public static 修饰

。外部类以外的地方 创建 static内部类  Out.Inner in = new Out.Inner() ;


。匿名内部类 必须 extends 一个父类 或者 implements 一个 interface ,且最多只能 extends/implements 一个 ,匿名内部类访问
外部类的局部变量 只能访问 final 修饰的 


。外部类的 static 成员不能访问 非static 内部类  例:


public class Test
{
    private class Inner{ }
    public static void main(String[] args)
    {
// new Inner() ;   将会出错
    }
}

。内部类的变量名 与 外层类的变量名 或者 局部变量名 出现冲突时 使用 外层类名.this  的方式来访问内部类  例:

class A{   private int s = 10;   public class B   {     private int s = 100;     public void Bb(int s)     //这里是从启动类中传过来的 1000     {System.out.println("s = " + s);   // 这个 s 离 上边的形参 s 最近,所以输出的是 1000System.out.println("s = " + this.s);   // 这个是 class B 中的 s 100System.out.println("s = " + A.this.s);     // 这个是  class A 中的 s 10      }   }}public class Test{   public static void main(String[] args)   {      A aa = new A();      A.B bb = aa.newB();      bb.Bb(1000);   }}
访问内部类方法 1).class A{  class B  {   }}class C{  A.B b = new A(). new B();    // 在另一个类C 中访问 class A 中的内部类的格式}方法 2).class A{    private int s;    public class B    {void Bb()  {   s = 70;   System.out.println("B: s = " + s); }     }     public void Ba()     {B b = new B();// 通过在外层类中创建一个方法,在方法中创建 内部类 的对象,b.Bb();     // 在该方法中便可以访问内部类      }}public class Test{   public static void main(String[] args)  {       A a = new A();      a.Ba();  }}





0 0