1. 匿名内部类对象
在类的内部直接创建一个接口的一个实现类对象。
2. 内部类
在类的内部定义一个类,称为内部类。
public class OuterClass{
private int i = 1;
private String outerName;
//在类的内部定义的类:内部类
class InnerClass{
private int i = 2;
private String innerName;
public void test(){
int i = 3;
System.out.println(i);//3
//通过以下方式访问外部类的成员变量,前提变量名一样
System.out.println(OuterClass.this.i);//1
System.out.println("outerName" + outerName);
System.out.println("innerName" + innerName);
}
}
//静态内部类
static class StaticInnerClass{
private String staticInnerName = "HIJ";
public void test(){
//静态内部类中的方法不能访问外部类的非静态成员
//System.out.println("outerName" + outerName);
System.out.println("staticInnerName" +
staticInnerName);
}
}
}
public class TestInnerClass{
public static void main(String[] args){
//1.在类的内部直接创建一个CompareObject接口的一个实现类对象
//匿名内部类
CompareObject compareObject = new CompareObject(){
@Override
public int compareTo(Object o1, Object o2){
return 0;
}
}
//2.在类的外部如何创建内部类对象?
//2.1 对于非静态内部类:必须先创建外部类对象,然后再创建内部类对象
OuterClass oc = new OuterClass();
InnerClass ic = oc.new InnerClass();
ic.test();
//2.2 静态内部类:内部类使用static来修饰,
// 所以创建该类的对象可以没有外部类对象
StaticInnerClass sic= new OuterClass.staticInnerClass();
}
}
3. 在类的外部如何创建内部类对象
- 对于非静态内部类:必须先创建外部类对象,然后再创建内部类对象
- 对于静态内部类:内部类使用static来修饰,所以创建该类的对象可以没有外部类对象。