内部类
- 把一个类定义在某个类中的,这个类就被称为内部类,内置类,嵌套类
- 访问特点
- 内部类可以直接访问外部类中的成员,因为内部类持有外部类的引用;格式:外部类ming.this
- 外部类要想访问内部类的成员,必须创建对象访问
- 内部类的访问格式
- 当内部类定义在外部类的成员位置,而且非私有,则可以在其他外部类中直接建立内部类对象
- 格式:外部类名.内部类名 变量名 = new 外部类对象.内部类对象
- 例子:Outer.Inner in = new Outer().new Inner();
- 当内部类在外部类成员位置,且被static修饰时
- 外部其他类可直接访问静态内部类的非静态成员
- 格式:new 外部类名.内部类名().内部类成员
- 例子:new Outer.Inner().function();
- 外部其他类可直接访问静态内部类的静态成员
- 格式:new 外部类名.内部类名.内部类成员
- 例子:new Outer.Inner.function();
- 外部其他类可直接访问静态内部类的非静态成员
- 当内部类定义在外部类的成员位置,而且非私有,则可以在其他外部类中直接建立内部类对象
- 内部类的使用场景
- 有A类和B类,A类想直接访问B类的成员,B类访问A类成员的时候,需要创建A类对象进行访问,这个时候,就可以把A类定义为B类的内部类
- 内部类的位置
- 成员位置
- 可以被private修饰
- 可以被static修饰。(它访问的外部类的成员也必须是静态的)
- 局部位置
- 可以直接访问外部类中的成员,因为还持有外部类的持用
- 可以直接访问局部成员,但是局部成员要用final修饰
- 局部内部类不能用private和static修饰
- 成员位置
-
package com.tingle.j2se.basic; /** * Created on 2020/4/22 22:13 * * @author Tingle */ public class Example5 { public static void main(String[] args) { System.out.println("******start******"); Outer outer = new Outer(); outer.getSongNum(); Outer.Inner inner = new Outer().new Inner(); inner.getStoryNum(); inner.getAllNum(); System.out.println("******end******"); } } class Outer{ private int num = 10; public void getSongNum(){ System.out.println("有歌曲" + num + "首"); } class Inner{ private int num = 20; public void getStoryNum(){ System.out.println("有故事" + num + "个"); } public void getAllNum(){ System.out.println("共计数量:" + (Outer.this.num + this.num)); } } }
运行结果: