内部类:
  概述: 类里边还有一个类, 里边那个类叫内部类, 外边那个类叫外部类.
 

分类:
  成员内部类: 定义在成员位置的内部类.
  局部内部类: 定义在局部位置的内部类.

格式:
  new 类名或者接口名(){
    //重写类或者接口中 所有的 抽象方法;
  };

本质:
  就是一个继承了类或者实现了接口的 匿名的子类对象. 匿名内部类不是类, 而是子类对象.

匿名内部类的实际应用:
  1) 当对 对象方法(成员方法) 仅调用一次的时候.
  2) 可以作为方法的实参进行传递.

建议:
  当接口中或者抽象类中的 抽象方法仅有一个的时候, 就可以 考虑使用匿名内部类.

代码说明:

public class DemoClass { //外部类

    String name;    //成员变量

    class Inner1 {    //成员内部类

    }

    //成员方法
public void show() {
int num = 10; //局部变量, 基本类型 Object obj = new Object(); //局部变量, 引用类型 //局部内部类. 局部变量, 引用类型
class Inner2{ }
}
}

应用举例:

public static void main(String[] args) {
// 对, Jumpping#jump(); 调三次.
//1) 当对 对象方法(成员方法) 仅调用一次的时候.
Jumping jm = new Jumping() { //多态
@Override
public void jump() {
System.out.println("我会跳");
}
};
jm.jump();
jm.jump();
jm.jump(); //2) 可以作为方法的实参进行传递.
show(new Jumping() { @Override
public void jump() {
System.out.println("我会跳, 可以作为方法的实参进行传递");
}
});
} public static void show(Jumping jm) {
jm.jump();
} public interface Jumping {
final public static int num = 10; public abstract void jump();
}
public static void main(String[] args) {                  /*
* 通过匿名内部类实现.
* new 类名或者接口名(){
  //重写类或者接口中 所有的 抽象方法;
};
*/
new Animal() {
public void eat() {
System.out.println("我是匿名内部类的方式实现的, 猫吃鱼");
}
}.eat();
} /**
* 抽象类: Animal
* @author
*
*/
public abstract class Animal {
public abstract void eat();
}
05-23 23:00