内部类的概念:
大多数时候,我们把类定义成一个独立的程序单元。在某些时候我们也把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被成为内部类(有的书上也叫作嵌套类)包含内部类的类被称为外部类,有时候也叫作宿主类。
了解了内部类的概念,那么内部类的作用是什么呢?
1.内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问。
2.内部类可以直接访问外部类的私有数据,因为内部类被当成其外部类成员,同一个类的成员之间可以互相访问。但是呢,外部类是不可以访问内部类的实现细节的,例如内部类的属性。
3.匿名内部类使用与于一次性使用的类。
内部类又分为非静态内部类和静态内部类两种。
1.非静态内部类:
定义内部类的话并不算难,就是把一个类放在另一个类中定义。这里的内部可以是外部类的任意位置,甚至可以在方法中定义。
定义内部类的语法如下:
public class Outerclass
{
//此处定义内部类
}
非静态内部类,就是没有使用static修饰的内部类。
下面就是对非静态内部类的一个简单应用:
package test;
public class EncodeDemo
{
//此处定义内部类
public class A
{
void display()
{
System.out.println("非静态内部类");
}
}
void show()
{
System.out.println("非静态外部类");
}
void use()
{
A a=new A();//A在外部类里就相当于一个方法
a.display();
}
public static void main(String []args)
{
EncodeDemo e=new EncodeDemo();
e.show();
e.use();
}
}
虽然非静态内部类可以访问外部类的私有成员,但是外部类的私有成员是不可以访问内部类里的属性和方法。
如果外部类想访问内部类里的属性和方法,就必须声明内部类对象来使用其对象和方法。
2.静态内部类
如果使用static来修饰一个内部类,则这个内部类那么这个内部类属于整个外部类,而不是属于外部类的某个对象。
静态内部类可以有静态成员,而非静态内部类则不能有静态成员。
静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量。
与一般内部类不同,在静态代码中不能够使用this操作,所以在静态内部类中只可以访问外部类的静态变量和静态方法。使用静态内部类的目的和使用内部类相同。如果一个内部类不依赖于其外部类的实例变量,或与实例变量无关,则选择应用静态内部类。