内部类的概念:在一个类的内部进行其他类的嵌套
内部类:
//外部类
class Out{
private String str="外部类的私有属性";
//内部类
class In{
public void print(){
System.out.println(str);
}
}
}
内部类的分类
- 成员内部类
- 静态内部类
- 方法内部类
- 匿名内部类
成员内部类
成员内部类中不能有static的变量或方法
只有先创建了外部类才能够创建内部类
静态内部类
被static修饰的内部类就是静态内部类
静态内部类需要注意:
静态内部类的创建是不依赖外部类,可以直接创建
静态内部类只能使用外部类被static修饰的成员变量和方法
外部类里创建静态内部类:
外部类 . 内部类 内部类对象 = new 外部类 . 内部类() ;
静态内部类:
public class Main{
public static void main(String args[]){
Out.In in=new Out.In();
in.print();
}
}
class Out{
private static String str="外部类的私有属性";
static class In{
public void print(){
System.out.println(str);
}
}
public void print(){
In in=new In();
in.print();
}
}
方法内部类
方法内部类时定义在外部类的方法中的类
方法内部类有以下特点:
方法内部类不能使用权限修饰符
方法内部类只有它所在的方法可以访问
方法内部类的方法形参必须被final修饰
方法内部类:
public class Main{
public static void main(String args[]){
Out out=new Out();
out.print();
}
}
class Out{
private String str="外部类的私有属性";
public void print(){
class In{
private void fun(){
System.out.println(str);
}
}
In in=new In();
in.fun();
}
}
匿名内部类
匿名内部类是没有名字的方法内部类
匿名内部类有以下特点:
匿名内部类必须实现一个接口或继承一个抽象类
匿名内部类中不能存在被static修饰的方法或成员
匿名内部类没有类名,所以无法拥有构造方法
匿名内部类:
public class Main{
public static void main(String args[]){
Out out=new Out();
out.print();
}
}
interface inter{
void fun();
}
class Out{
private String str="外部类的私有属性";
public void print(){
new inter(){
public void fun(){
System.out.println(str);
}
}.fun();
}
}