内部类的访问特点:
a:内部类可以直接访问外部类的成员 包括私有
b:外部类要访问内部类的成员 必须创建对象
class Outer {
class Inner{
public void print(){
System.out.println("Hello World");
}
}
}
public static void main(String[] args) {
//访问内部类的方法
//外部类.内部类 对象名 =外部类对象.内部类对象
Outer.Inner oi=new Outer().new Inner();
oi.print();
}
成员内部类的私有使用:
成员内部类被私有之后 不能通过上面的 创建 外部类.内部类 对象.成员内部类的方法 会报错
class Outer {
private class Inner{
public void print(){
System.out.println("Hello World");
}
}
//创建一个方法 在方法中创建成员内部类的对象 然后调用其中的方法
public void visitInner(){
Inner i=new Inner();
i.print();
}
}
public static void main(String[] args) {
Outer o=new Outer();
o.visitInner();
}
成员内部类的静态使用:
class Outer {
static class Inner{
public void print(){
System.out.println("Hello World");
}
}
}
public static void main(String[] args) {
//成员内部类的静态使用
//外部类.内部类 =外部类对象.内部类
Outer.Inner oi=new Outer.Inner();
oi.print();
}
成员内部类的面试题:
class Outer{
public int num=10;
class Inner{
public int num=20;
public void show(){
int num=30;
System.out.println("?"); //num
System.out.println("??"); //this.num
System.out.println("???"); //Outer.this.num(内部类之所以能取到外部类的成员 是因为他能获取到外部类的引用 外部类名.this)
}
}
}
public static void main(String[] args) {
//使用已知变量 在控制台输出30,20,10
Outer.Inner oi=new Outer().new Inner();
oi.show();
}
局部内部类:(只能在其所在的方法中访问)
class Outer{
private final int num =10;
public void method(){
class Inner{
public void print(){
System.out.println("Hello World");
}
}
//只能在其所在的方法中对其访问
Inner i =new Inner();
i.print();
}
}
public static void main(String[] args) {
Outer o=new Outer();
o.method();
}