内部类 体现
1,当A类中的内容要被B类直接访问时。而A类还需要创建B类的对象,访问b的内容时,这时,可以将B类定义到A类的内部,这样访问更为便捷。
此时b称为内部类(内置类);
2,内部类必须有自己所属的名字,没有的话标识不了内部类。
访问方式:内部类可以直接访问外部类中的所有成员,包含私有的。而外部类要想要访问内部类的成员必须创建内部类的对象。
当我们在描述事物时,事物的内部还有事物,这个内部的事物还在访问外部事物中的内容。这时就将这个事物通过内部类来描述。
内部类被访问的方式:
1,内部类在成员位置上的被访问方式:
成员是可以被指定的修饰符所修饰的。public修饰内部类内部类不加载内存,static修饰的内部类随着外部类的加载而加载。非静态内部类中不允许定义静态成员,仅允许在静态内部类中定义 静态常量 static final。
2,内部类访问外部类,通过这样引用:外部类.this,对于静态内部类就不持有 外部类.this, 而是直接使用 外部类名;
3,局部内部类:定义在类的方法中。并且内部类定义在局部时,只能访问被final修饰的局部变量。未被修饰的局部变量生命周期太短了。
内部类的继承或者实现:看APi文档,发现类名或者接口名称中有.,说明是内部类,或者是内部接口。内部类是可以继承或者延伸其他的类或者接口的。
内部类对外提供访问方式:
好处:可以通过内部类的方式对类进行继承重写,或者接口进行实现。
通过公共的方式对其内部类对象进行访问,因为通常内部类很有可能被外部类封装其中。我们就可以通过父类或者接口的方式访问到内部类对象。
如果内部类对外提供访问方式,可以如此获取:外部类.内部类 内部类 = 外部类.getObject();
如果内部类被私有,则可以通过父类型获取。访问方式:父类 a = 外部类.getObject();
匿名内部类:不想创建具体的子类,还想创建父类的子类对象。其实就是创建一个在类中带有内容的子类对象。格式 new 父类or接口(){重写父类方法}
匿名内部类就是内部类的简化形式。
使用前提:内部类必须要继承父类或者实现接口。
实现:直接创建父类对象重写父类的方法。抽象类则可以重写抽象类中的方法。
new AbsDemo{ //absdemo的子类对象,带着内容的子类对象。
//这种写法称呼,匿名内部类。
{
//重写absdemo中的抽象的show方法:
void show(){
system.out.pr("num==="+num);
}
}
}.show();//对象调用方法。
当静态方法访问内部类时,内部类必须是静态的。
|