找回密码
 注册
搜索
热搜: java php web
查看: 366|回复: 0

[笔记]java学习笔记7--内部类

[复制链接]
发表于 2009-1-26 05:58:55 | 显示全部楼层 |阅读模式
[笔记]java学习笔记7--内部类
1 内部类:定义在类内部的类,类之间有了包含关系。(不是重点)
  所有用到内部类的地方都可以不用内部类,有内部类可以使代码简洁,内部类是个编译时语法.  内部类可以访问外部类的私有成员。内部类是依附外部类而存在的,在构造内部类时先构造外  部类对象。内部类可为静态,可用protected和private修饰。而外部类不可以,外部类只能使用  public和default。




2 内部类的分类:

  成员式(作为外部类成员):  静态内部类  //只能访问外部类的静态成员。                                              成员内部类
  局部式(方法体内部):      局部内部类  //方法体内部有效
                              匿名内部类

3 成员内部类:作为外部类的成员,与外部类的属性,方法并列.

  在内部类中访问实例变量:this.属性
  在内部类访问外部类的实例变量:外部类名.this.属性

  System.out.println(Outer.this.name1);
//Outer.this外部类的当前对象,内部类对象是哪个外部类对象生成的谁就是外部类的当前对象

4 对于一个名为outer 的外部类和其内部定义的名为inner 的内部类。编译完成后出现  outer.class 和outer$inner.class 两个类。

5 成员内部类不可以有静态属性,这是因为静态属性是在加载类的时候创建,这个时候内部类还  没有被创建。

6 在外部类内部可以直接inner s=new inner();
  //因为外部类知道inner 是哪个类,所以可以生成对象。

7 在外部构造成员内部类语法两种:
  (1) Outer.Inner in=Outer.new.Inner();
  (2) OurerA out =new OutreA();
  OutreA.innerB innb=out.new innerB();

  OurerA.innerA oi=new OurerA.innerA();  //注意这种写法不对

8 局部内部类:在方法中定义的内部类.在局部内部类前不加修饰符public 和private,其范围为  定义它的代码块。局部内部类可以访问外部类的final的局部变量.
  在类外不可直接生成局部内部类(保证局部内部类对外是不可见的)。
    要想使用局部内部类时需要生成对象,对象调用方法,在方法中才能调用其局部内部类。

9 静态内部类:定义在类中,任何方法外,用static修饰.
  静态内部类的对象可以直接生成,不需要外部类对象,这是和成员内部类的区别:
  OurerA.innerA oi=new OurerA.innerA();
  静态内部类只能访问外部类的静态成员。

10 匿名内部类:一个匿名内部类一定是在new 的后面,用其隐含实现一个接口或实现一个类,没   有类名,根据多态,我们使用其父类名。

11 匿名内部类:唯一一个没有构造方法的类.这是因为构造器的名字必须合类名相同,而匿名内部    类没有类名。匿名内部类在编译的时候由系统自动起名Out$1.class。

   匿名内部类例子:
   public class Arrmy {
        public static void attack(Weapon w){        
                w.shoot();
        }
        public static void main(String[] args) {
                attack(new Weapon(){
                        public void shoot(){
                                System.out.println("shoot");
                        }
                });
        }
   }
   interface Weapon{
        void shoot();
   }

12 编译时概念:编译器给你检查差别,语法
   (1)内部类  编译器检查是否符合内部类的语法.
   (2)访问权限
   (3)泛型

13 特殊语法:
   除了在外部类外部访问内部类之外,也可以在外部类某个方法里生成内部类对象.
   public InnerB m(){
    return  this.new  InnerB();  // 谁调m()方法,谁是外部类的当前对象. 参看老师代码   
   }                             //InnerClassTestA.java
好好学习,天天向上
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|软晨网(RuanChen.com)

GMT+8, 2024-11-23 00:32

Powered by Discuz! X3.5

Copyright © 2001-2023 Tencent Cloud.

快速回复 返回顶部 返回列表