[访问修饰符] 接口名称[父接口1、父接口2...]{
常量定义;
方法定义;
访问修饰符:只能是或默认。
接口名称:使用与类名称相同的命名机制。
:接口可以从多个源继承。
常量:接口中的属性只能是常量,用:final修饰。 不写时,系统默认使用该修改。
方法:接口中的方法只能是: 。 即使你不写,你也会使用这个修改。
子类实现接口中的规范。
接口不能被实例化,但可以用来声明引用变量类型。
实现接口的类必须实现接口中的所有方法,并且这些方法只能是 .
接口可以从多个接口继承。 与类继承类似,如果子接口扩展了父接口,它将获得父接口中定义的所有内容。
内部类:
一般来说,我们将类定义为独立的单位。 但在某些情况下,我们将一个类放在另一个类的定义中,
称为内部类。
内部类可以使用、、、和进行修改。
外部顶级类(我目前接触的类)只能用 and 来修改。
内部类只是一个编译时概念。 一旦我们编译成功,它们就会变成两个不同的类。
因此,内部类是一个相对独立的存在,其成员变量/方法名可以与外部类相同。
内部类的作用: 1.内部类提供更好的封装。 只有外部类可以直接访问,同一包内的其他类不允许直接访问。
2 内部类可以直接访问外部类的私有属性,内部类被视为其外部类的成员。
但外部类不能直接访问内部类。
3 接口只解决了部分多重继承的问题,而内部类则让多重继承的解决更加完整。
内部类的用例:
1 因为内部类提供了更好的封装特性,可以方便地访问外部类的属性。
因此,当只向外部类提供服务时,可以优先使用内部类。
2 使用内部类间接实现多重继承。 每个内部类可以独立继承一个类或实现某些接口。
因此,无论外部类是否继承了某个类或者实现了某个接口,对内部类都没有影响。
内部类主要分为成员内部类(抖音()、静态内部类)、匿名内部类、本地内部类。
成员内部类(可以使用,,,任意修改)
类文件:外部类$内部类.class
抖音()(在外部课堂中使用抖音()与平时使用其他课程没有什么区别)
抖音()必须存储在外部类对象中。 因此,如果有一个抖音()对象,
那么必须有一个对应的外部类对象。 抖音()对象单独属于外部类的对象。
抖音()可以直接访问外部类的成员,但外部类不能直接访问抖音()的成员
抖音()不能有静态方法、静态属性和静态初始化块。
外部类和静态代码块的静态方法不能访问抖音(),包括抖音()定义的不能用于创建实例的变量。
静态内部类:当静态内部类对象存在时,不一定存在对应的外部类对象。
因此,静态内部类的实例方法不能直接访问外部类的实例方法。
静态内部类被认为是外部类的静态成员。因此,外部类的方法可以传递:“静态内部类.name”
访问静态内部类的静态成员的方法。 通过()()访问静态内部类的实例。
匿名内部类:适合只需要使用一次的类。
匿名内部类没有访问修饰符
匿名内部类没有构造函数方法。 因为它连名字都没有。 。 。 。 。 。
局部内部类:在方法内部定义的类,其作用域仅限于该方法,称为局部内部类。
局部内部类的使用主要用于解决比较复杂的问题。 我们想创建一个类来帮助我们解决问题。
当时我们不希望这个类公开,所以创建了一个本地内部类。 局部内部类的编译方式与成员内部类相同,
只不过它的作用域发生了变化,只能在这个方法内使用,在这个方法之外就会失效。
常量池:在Java内存分析中,我们经常听到“常量池”的描述。 其实常量池也分为以下三种。
1 全局字符串常量池(Pool)
全局字符串常量池中存储的内容在类加载后存储在Pool中,每个VM中只有一份。
存储字符串常量的引用值(在堆中生成字符串对象实例)
文件常量池(Class Pool)
类常量池在编译期间可供每个类使用。 在编译阶段,它存储常量(文本字符串、最终常量等)和符号引用。
3 运行时常量池(Pool)
使用运行时常量池时,类加载完成后,将各个类的常量池中的符号引用值转移到运行时常量池中。
也就是说,每个类都有一个运行时常量池。 类解析后,将符号引用替换为直接引用,与全局常量池的引用值一致。