A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 2015天马行空 中级黑马   /  2015-10-29 14:34  /  435 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

匿名内部类对于java初学者来说是一个难点,不过也有他的规律可循,以内部类为切入点,分析一下匿名内部类
内部类
(1)把类定义在一个类的内部。
(2)特点:
A:内部类可以直接使用外部类的成员,包括私有。
B:外部类要使用内部类成员,必须创建对象使用。
(3)内部类的分类:
局部内部类:定义在方法中的内部类
成员内部类:定义在类中方法外的内部类
(4)成员内部类
class Outer {
class Inner {
}
}
普通的修饰的时候:
外部类名.内部类名 变量 = 外部类对象.内部类对象;
Outer.Inner oi = new Outer().new Inner();
class Outer {
static class Inner {
    void method(){}
}
}
用静态修饰内部类时:
外部类名.内部类名 变量 = 外部类名.内部类对象
Outer.Inner oi = new Outer.Inner();
用静态修饰内部类和方法时:
Outer.Inner.method()
成员内部类:
private:为了数据的安全。
static:为了方便调用。
,以上讲解了内部类的一些知识,下面我们来分析一下匿名内部类.
匿名内部类存在的前提是:存在一个抽象类或者接口.
匿名内部类见名知意:即没有名字的内部类,但其实其本质是一个继承了类或者实现了接口的子类匿名对象。
其格式为:格式:
new 抽象类或者接口() {
重写父类方法;
};
下面通过代码来解释一下匿名内部类:
class Demo_Inner {
  public static void main(String[] args) {
  Out out = new Out(); out.method();
}
}
class Out {
//外部类的普通方法
public void method() {
//new 类名或者接口名(){覆盖类或者接口中的代码,(也可以自定义内容。)};
//创建一个有名字的匿名内部类对象
Fu fu = new Fu() {
  //定义局部内部类的成员方法
public void inMethod(){
  System.out.println("匿名内部类的方法被调用了");
}
};
  fu.inMethod(); method2(fu);
//匿名对象 同时也是内部类对象 直接调用方法
new Fu() {
//定义局部内部类的成员方法
  public void inMethod(){
  //System.out.println("匿名内部类的方法被调用了"); } }.inMethod();
  //调用参数为自定义类型的方法时,使用匿名内部类对象作为参数传递
  method2(new Fu() {
  //定义局部内部类的成员方法
public void inMethod(){ System.out.println("匿名内部类的方法被调用了");
}
});
//调用返回值为自定义类型的方法时,使用匿名内部类对象作为返回值。 Fu fu2 = method3(); fu2.inMethod(); }
  //自定义数据类型作为参数 public void method2(Fu fu) { fu.inMethod(); }
  //自定义数据类型作为返回值类型
  public Fu method3() { return new Fu() {
  //定义局部内部类的成员方法
  public void inMethod(){ System.out.println("匿名内部类的方法被调用了");
}
};
}
}
abstract class Fu {
public abstract void inMethod();
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马