Java内部类之成员内部类(二)
定义:
成员内部类是定义在外部类的成员位置,并且没有static修饰;
声明格式:
修饰符 class 外部类名称{
修饰符 class 内部类名称{
}
}
特性:
1.具有类的相关定义功能;
2.不能定义静态变量和静态方法;
3.可以定义静态常量;
4.可以通过访问劝降修饰符来访问成员内部类;
5.可以在外部进行访问;
6.可以继承和实现接口;
用法:
1.可以直接访问外部类的所有成员,包含私有的;
class Outer { //外部类
private int r = 0;
public static int count =1;
class Inner { //内部类
public void drawSahpe() {
System.out.println(r); //外部类的private成员
System.out.println(count); //外部类的静态成员
}
}
}
2.可以添加任意访问修饰符(public、protected、默认、private),因为它的地位就是一个成员;
class Outer { //外部类
public class Inner1 { //内部类
}
protect class Inner2 { //内部类
}
class Inner3 { //内部类
}
private class Inner4 { //内部类
}
}
3.作用域和外部类的其他成员一样,为整个类体,外部类访问成员内部类时的访问方式:先创建对象,再访问;
class Outer {
private double radius = 0;
public Outer(double radius) {
this.radius = radius;
getDrawInstance().drawSahpe(); //必须先创建成员内部类的对象,再进行访问
}
private Inner getDrawInstance() {
return new Inner();
}
class Inner { //内部类
public void drawSahpe() {
System.out.println(radius); //外部类的private成员
}
}
}
4.成员内部类访问外部类成员时(比如;属性)[访问方式:直接访问];
class Outer { //外部类
double radius = 0;
class Inner { //内部类
public void drawSahpe() {
System.out.println(radius); //外部类的成员属性
}
}
}
5.如果外部类和内部类的成员重名时,内部类访问的话,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问;
外部类.this.成员变量
外部类.this.成员方法