什么是内部类?

简介: 什么是内部类?

前言


当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构最好使用内部类。在 Java 中,可以将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类。内部类也是封装的一种体现。


public class OutClass {
    class InnerClass{
    }
}
// OutClass是外部类   InnerClass是内部类


定义在class 类名{}花括号外部的,即使是在一个文件里,都不能称为内部类


public class A{
}
class B{
}
// A 和 B是两个独立的类,彼此之前没有关系


内部类和外部类共用同一个java源文件,但是经过编译之后,内部类会形成单独的字节码文件


一、什么是实例内部类


public class OutClass {
// 成员位置定义:未被static修饰 --->实例内部类
    public class InnerClass1{
   }
}


1.    外部类中的任何成员都可以在实例内部类方法中直接访问

2.    实例内部类所处的位置与外部类成员位置相同,因此也受public、private等访问限定符的约束

3.    在实例内部类方法中访问同名的成员时,优先访问自己的,如果要访问外部类同名的成员,必须:外部类名称.this.同名成员 来访问

4.    实例内部类对象必须在先有外部类对象前提下才能创建

5.    实例内部类的非静态方法中包含了一个指向外部类对象的引用

6.    外部类中,不能直接访问实例内部类中的成员,如果要访问必须先要创建内部类的对象。


二、什么是静态内部类


public class OutClass {
// 成员位置定义:被static修饰 ---> 静态内部类
     static class InnerClass2{
     }
}


1.    在静态内部类中只能访问外部类中的静态成员如果确实想访问,应该如何做?


外部类的非静态成员,需要通过外部类的对象的引用才能访问。非要访问: OuterClass2 outerClass = new OuterClass2(); outerClass.data1;

2.    创建静态内部类对象时,不需要先创建外部类对象


三、什么是局部内部类


public void method(){
// 方法中也可以定义内部类 ---> 局部内部类:几乎不用
     class InnerClass5{
     }
}

定义在外部类的方法体或者{}中,该种内部类只能在其定义的位置使用,一般使用的非常少


四、什么是匿名内部类


new Person(){
};


匿名内部类其实是一个带着具体实现父类或者父接口的匿名的子类对象。


如果接口当中的实现类(或者父类的子类)在程序当中只需要使用唯一的一次,这种情况下可以使用匿名内部类。

相关文章
|
7月前
|
Java
内部类(下)匿名内部类,静态内部类的使用
内部类(下)匿名内部类,静态内部类的使用
47 0
|
8月前
内部类
内部类
35 0
|
8月前
|
Java 编译器
你真的了解四种内部类吗
你真的了解四种内部类吗
46 0
|
6月前
|
编译器
神奇的内部类
神奇的内部类
28 0
|
7月前
|
Java
内部类(上)成员内部类,局部内部类的使用
内部类(上)成员内部类,局部内部类的使用
38 0
|
8月前
内部类详解
内部类详解
41 0
|
8月前
|
Java 数据安全/隐私保护
1.2 什么是Java内部类:内部类的特点
1.2 什么是Java内部类:内部类的特点
50 0
JavaN种内部类
内部类的使用场景、作用: 当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构可以选择使用内部类来设计。 内部类通常可以方便访问外部类的成员,包括私有的成员。
54 0
|
Java
java中的四种内部类详解(成员类内部类,静态内部类,局部内部类,匿名内部类)
java中的四种内部类详解(成员类内部类,静态内部类,局部内部类,匿名内部类)
108 0
|
Java
四种内部类你都了解了吗?
四种内部类你都了解了吗?
62 0