内部类
1.内部类概念
内部类就是把一个类定义在一个类的内部
内部类的种类:
分两种情况:
(1)在类中定义类(成员内部类,静态内部类)
(2)在方法中定义类(局部内部类,匿名内部类)
2. 局部内部类
局部内部类(本地内部类):定义在方法中的类.
只能在方法中使用,出了方法就无法使用,所以称为局部内部类
原因:因为方法无法像类一样直接调用成员
public class Demo1 {
public void test() {
//局部内部类,不能在方法外使用
class In{
public int a=100;
}
}
}
3.成员内部类
成员内部类也叫实例内部类,可以把他当做外部类的一个平台实例成员
class Out{
class In{
public int a=100;
}
}
注意:
1.在实例内部类中,不能创建一个静态成员变量
因为静态成员变量在类加载的时候就会创建,我们正常情况下我们可以直接通过类来访问静态对象而不需要去实例化对象,但是当他在实例内部类中就不能创建,因为内部类无法直接通过外部类访问,必须得创建实例,或者你改成静态内部类
但是我们可以创建静态常量(static final)
2.如何实例化实例内部类?
先实例化外部类
外部类名.内部类名 变量 = 外部类对象的引用.new 内部类();
因为没有实例化外部类我们就得不到内部类这个对象,更别说实例它了
3. 成员内部类当中,如果包含了和外部类同名的成员变量,那么如何在成员内部类当中访问?
4.如何继承内部类?(了解即可)
4. 当一个类有内部类的时候的字节码文件(了解即可)
格式:外部类名$内部类名.class
4.静态内部类
注意事项:
1.如何实例化静态内部类对象
外部类名.内部类名 变量名= new 外部类名.内部类名()
因为静态内部类可以直接通过外部类获得,故可以直接创建实例
2. 静态内部类当中,如何访问外部类的成员变量?
通过在静态内部类中创建外部类的实例来访问.
5.匿名内部类
通过匿名内部类访问类中方法
通过匿名内部类重写方法