目录
1.内部类基本概念
内部类: 所谓内部类就是在一个类内部进行其他类结构的嵌套操作。
package 内部类;
public class Body {
class Heart{
public void work() {
System.out.println("正在跳动.....");
}
}
2.内部类分类
2.1 有名内部类
package 内部类;
//外部类
public class Body {
//有名内部类
class Heart{
public void work() {
System.out.println("正在跳动.....");
}
}
public static void main(String[] args) {
Body body = new Body();
Heart heart = body.new Heart();//内部类
heart.work();
说明:全局有名内部类的使用方式类似于全局变量;局部有名内部类的使用方式类似局部变量——它们都有固定的使用范围
2.2 匿名内部类
由于没有类名而不能单独存在,定义匿名内部类的同时须直接实例化该类,其语法格式如下:
new 父类构造器([参数列表])|接口(){
//匿名内部类类体
}
//匿名内部类创建的对象一定是普通类或抽象类的子类对象,一定是接口实现类对象
static Mammal mammal = new Mammal(){
@Override
public void move() {
System.out.println("靠鳍游动......");
}
};
//接口
package 内部类;
public interface Mammal {
public void move();
}
3.匿名内部类的作用
匿名内部类常用于重写父类或者接口中的方法,当然也可以定义新的属性和方法,此时该方法上转型对象无法调用
public static void main(String[] args) {
Mammal mammal = new Mammal(){
@Override
public void move() {
System.out.println("靠鳍游动......");
}
public void eat() {
System.out.println("正在吃......");
}
};
//匿名内部类常用于重写父类或者接口中的方法,当然也可以定义新的属性和方法,此时该方法上转型对象无法调用
new Mammal() {
@Override
public void move() {
System.out.println("靠鳍游动......");
}
public void eat() {
System.out.println("正在吃......");
}
}.eat();//指明输出新方法eat
new Mammal() {
@Override
public void move() {
System.out.println("靠鳍游动......");
}
public void eat() {
System.out.println("正在吃......");
}
}.move();//输出新方法move
4.生成的外部类文件
4.1 有名外部类
有名内部类编译后生成外部类$内部类.class文件 (文件--右键--properties--文件)
class A {
}
//有名内部类编译后生成外部类$内部类.class文件 (文件--右键--properties--文件)
4.2 匿名外部类
匿名内部类编译后生成外部类$内部类.class文件
Object o = new Object () {
};
Object object = new Object () {
};
//匿名内部类编译后生成外部类$内部类.class文件