java中还有一种内部类技术,简单的说就是在一个类的内部定义一个类。内部类看起来简单,但是当你深入其中,你会发现他极其复杂。事实上,java应用开发过程中内部类使用的地方不是很多,一般在图形用户界面开发中用于事件处理。
内部类技术虽然使得程序结构变得紧凑,但是在一定程度上破坏了java面向对象的思想。
内部类概述
java语言中允许在一个类(或方法、代码块)的内部定义另一个类,后者称为“内部类”,也称为“嵌套类”,封装它的类称为“外部类”,内部类与外部类之间存在逻辑上的隶属关系,内部类一般只用在封装它的外部类或代码块中使用。
内部类的作用
1.封装。将不想公开的实现细节封装到一个内部类中,内部类可以声明为私有的,只能在外部类中访问。
2.提供命名空间。静态内部类和外部类能够提供有别于包的命名空间。
3.便于访问外部类成员。内部类能够很方便的访问外部类的成员,包括私有成员也能访问。
内部类的分类
内部类—》有名内部类和匿名内部类
有名内部类—》按照作用域分为:局部内部类和成员内部类
成员内部类–》可以分为实列内部类和静态内部类
- 成员内部类
成员内部类类似于外部类的成员变量,在外边类的内部,且方法体和代码块之外的地方定义内部类。 - 实列内部类
实列内部类与实列变量类似,可以声明为公有级别、私有级别、默认级别、受保护级别。而外部内只能声明为公有或默认级别。
package 内部类;
//内部类按照是否有名字可以分为
//1.有名内部类
//2.匿名内部类
//有名内部类按照作用域不同又可以分为
//1.局部内部类
//2.成员内部类
//成员内部类又可以分为
//1.实列内部类
//2.静态内部类
//演示实列内部类
//这是外部类
public class MyLei {
//外部类成员变量
private int x = 10;
//外部类方法
public void print(){
System.out.println("调用外部方法");
}
//测试内部类
public void test(){
Inner inner = new Inner();
inner.display();
}
//定义内部类
class Inner{
//内部类成员变量
private int x = 5;
//内部类方法
void display(){
//访问外部类成员变量
System.out.println("外部成员变量"+MyLei.this.x);
//访问内部类成员变量
System.out.println("内部类成员变量"+this.x);
//调用外部内的成员方法
MyLei.this.print();
print();
}
}
public static void main(String[] args) {
MyLei myLei = new MyLei();
myLei.test();
}
}
- 静态内部类
静态内部类与静态变量类似,在声明的时候使用static关键字修饰,静态内部类之恶能访问外部内中静态成员,所以静态内部类使用的场景不多,但可以提供有别于包的命名空间。 - 局部内部类
局部内部类就是定义在方法体或者代码块的内部,局部内部类的作用月只在当前方法体或者代码块中。局部内部类访问级别只能是默认的,即不能使用public、private、protected修饰。局部内部类也不能是静态,即不能使用static修饰,局部内部类也可以访问外部所有成员。