Java中的内部类
文章目录
- Java中的内部类
- 一、什么是内部类?
- 二、内部类的分类
- 三、对常用的内部类进行讲解
- 1.实例内部类
- 2.静态内部类
- 3.局部内部类
- 4.匿名内部类
一、什么是内部类?
定义:一个类定义在另一个类里面,此类就叫做内部类。
相反定义在一个方法里面的叫做外部类。
举例:
public class OuterClass {
class Innerclass {
//这里的InnerClass就叫做内部类;
}
}
【注意事项】
定义在class 类名{}花括号外部的,即使是在一个文件里,都不能称为内部类。
public class OuterClass {
}
class InnerClass {
}
//这两个类是独立的,并没有什么关系!!!
二、内部类的分类
在Java中,内部类的==分类大概有四种:==实例内部类(非静态内部类或者构造内部类)、静态内部类、局部内部类、匿名内部类。
简单看一下,它们在一个类哪些位置:
class OuterClass {
//实例内部类
class InnerClass1 {
}
//静态内部类
static class InnerClass2 {
}
//局部内部类(定义在方法中的内部类),但几乎不用
public void func() {
class InnerClass3 {
}
}
}
三、对常用的内部类进行讲解
1.实例内部类
概念:即未被static修饰的成员内部类。
(1)如何获取一个实例内部类的对象
(2)在实例内部类中可直接访问外部类对象(任意访问限制修饰符的成员)
(3)在实例内部类中不能有静态的成员变量
解释:因为内部类和成员变量、成员方法是同一个等级,在类进行加载的时候,static修饰的变量就会执行。
如果非要在内部类中定义静态变量,只能用static final 来定义
public static final int data7=7;//被final修饰相当于定义一个常量,就不会被改变
(4)在实例内部类方法中访问同名的成员时,优先访问自己的,如果要访问外部类同名的成员,格式必须为:外部类名
称.this.同名成员 来访问
但我们非要访问外部类中的那个变量,该怎么办?
方法一:先用外部类创建一个对象,然后用该对象来引用
方法二:外部类名+“.”+this+“.”
(5)外部类如何访问内部类中的成员及方法
方法:还是要先创建内部类的对象
(6)注意事项
- 外部类中的任何成员都可以在实例内部类方法中直接访问(因为都是在同一个{}中,且都包含在外部类中)。
- 实例内部类所处的位置与外部类成员位置相同,因此也受public、private等访问限定符的约束。
- 实例内部类对象必须在先有外部类对象的前提下才能创建。
- 外部类中不能直接访问实例内部类中的成员,如果要访问,就必须要先创建内部类的对象。
2.静态内部类
概念:被static修饰的内部成员类称为静态内部类。
(1)在静态内部类中只能访问外部类中静态的成员变量和方法
如果非要访问,应该怎么做?
方法:需要在静态内部类中创建一个外部类的对象,再进行访问
(2)注意事项
- 创建静态内部类对象时,不需要先创建外部类对象
3.局部内部类
概念:定义在外部类的方法体或者{}中,该种内部类只能在其定义的位置使用,一般使用的非常少。
(1)注意事项
- 局部内部类只能在当前方法中使用,其他位置都不能使用。
- 不能被public、static等访问限定修饰符修饰。