Hello 今天学到了内部类 让我们来复习下
什么是内部类
在类的中定义一个类,被称作内部类
class OuterClass{
class InnerClass{//内部类
}
}
JAVA里面不止一个内部类
有四种内部类
1,成员内部类
定义在类中的类,属于类的成员,创建成员内部类对象必须依赖外部类对象
第一:成员内部类中不能存在任何static的变量和方法;
第二:成员内部类是依附于外部类的,所以只有先创建了外部类才能够创建内部类。
class OuterClass{
class InnerClass{//成员内部类
}
}
//创建外部类对象
OuterClass oc= new OuterClass();
//通过外部类对象创建内部类对象
OuterClass.InnerClass oi = oc.new InnerClass();
2,静态内部类
定义在类中的类,class关键字前加入static修饰符,创建静态内部类对象不需要外部类对象。
第一: 它的创建是不需要依赖于外围类的。
第二: 它不能使用任何外围类的非static成员变量和方法。
class OuterClass{
static class InnerClass{//静态内部类
}
}
//创建静态内部类对象
OuterClass.InnerClass oi = new OuterClass.InnerClass();
3,局部内部类
定义在方法中的类,作用范围只有在当前方法中
有这样一种内部类,它是嵌套在方法和作用于内的,对于这个类的使用主要是应用与解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类,局部内部类和成员内部类一样被编译,只是它的作用域发生了改变,它只能在该方法和属性中被使用,出了该方法和属性就会失效。
public void method(){
class InnerClass{//局部内部类
}
InnerClass ic= new InnerClass();
}
4,匿名内部类
特殊的局部内部类 没有类名 只能作为子类出现且只能创建一个对象!
1、使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。
2、匿名内部类中是不能定义构造函数的。
3、匿名内部类中不能存在任何的静态成员变量和静态方法。
4、匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
5、匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。
public void method(){
MyClass mc =new MyClass(){
};
}
//匿名内部类,new MyClass 那么mc 就等于MyClass的子类对象结尾的{ }就代表子类的代码块
内部类的定义
1、内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。
2、在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。
3、创建内部类对象的时刻并不依赖于外围类对象的创建。不准确的,分情况
4、内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。把内部类当成X来看待,类里面多了一个X
5、内部类提供了更好的封装,除了该外围类,其他类都不能访问。私有内部类;