前言
Java中,有一些类存在于其他类的内部,有一些类,内部存在其他类。所谓内部类就是定义在类中的类,而包含这个内部类的类就是外部类。
与类中变量或是对象相似的是,内部类根据不同的位置和效用分为:成员内部类,局部内部类,匿名内部类和静态内部类
下面来总结一下:
成员内部类
作为类成员出现的内部类,它的作用范围和成员变量十分相似。
先写一个带有成员内部类的类:
class OuterClass
{
private int num = 0;
public void f()
{
System.out.print("Hello World!!");
}
class InnerClass
{
public void doSomething()
{
f();
System.out.println(num);
}
}
}
内外类的方法和变量
在外部类中,两者的变量和方法是相互使用的,内部类可以访问外部类的成员和方法,外部类可以通过内部类对象访问内部类成员和方法。即使成员或是方法是被private修饰的。
在外部类外,通过内部类对象是无法访问到内部类的private的,这点同外部类。
那么既然可以相互调用,就必然会面临着命名冲突的问题,这里的命名冲突包含着内部类局部变量,内部类成员变量,外部类成员变量之间的冲突。为了解决这个问题,java采取的机制和解决类方法中局部变量与成员变量冲突的解决方案:使用this关键字和外部类调用。
具体的,在内部类方法中,若命名产生冲突(极短一些的情况,假设上述三种变量都存在冲突),我们可以:
- 直接使用变量名,访问内部类局部变量
- 使用this关键字,访问内部类成员变量
- 使用 外部类名.this,访问外部类成员变量
可参考以下代码:
class Outer
{
private int x