1.内部类的概念和分类
类就是来模拟事物的
如果一个事物的内部包含另一个事物,呢么这就是一个类内部包含另一个类(外部包含内部) 例如身体与心脏 汽车与发动机的关系 比如发动机一定要在汽车内部工作,掏出来就没有用了
分类: 成员内部类
局部内部类(包含匿名内部类)
2.成员内部类定义
成员内部类定义格式 修饰符 class 外部类名称{ 修饰符 class 内部类名称{ //... } //... } 注意:内用外可以随意访问,权限不受影响;但是外用内,一定需要借助内部类对象
3.成员内部类的使用
如何使用成员内部类 方法 1.在外部类的方法当中,使用内部类,然后main只是调用外部类的方法。【间接方式】 2.公式: 类名称 对象名 = new 类名称(); 一般创建对象方法 这里直接调用: 外部类名称.内部类名称 对象名 = new 外部类名称().new内部类名称() 两边都是外点内(大点小)
Baby类
psvm
4.内部类的同名变量访问
子类父类不是继承关系 因为继承关系可以说子类就是一个父类 好比猫就是一个动物
但是不能说心脏就是身体 所以不是继承关系
5.局部内部类定义
局部内部类 如果一个类是定义在一个方法内部的,呢么这就是一个局部内部类. 什么叫局部? 只有当前所属的方法能使用他,出了这个方法就不能用了 定义格式: 修饰符 class 外部类名称{ 修饰符 返回值类型 外部类方法名称(参数列表){ class 局部内部类名称{ //局部内部类是在方法里面 //... } } } 小结一下类的权限修饰符 public> protected >default> private 定义一个类的时候,权限修饰符有规则 外部类 public 或 (default)不写 成员内部类 都能用 局部内部类 什么都不能写
6.局部内部类的final问题
局部内部类:如果希望访问所在方法的局部变量,呢么这个局部变量必须是【有效final】的 就是num不能变 备注:从java8开始,只要局部变量事实不变,呢么final关键字可以省略。 原因: 1.new 出来的对象在堆内存当中 2.但是局部变量是跟着方法走的在栈内存当中 3.方法运行结束之后立刻出栈,局部变量就会立刻消失 4.new出来的对象,会在堆当中持续,存在直到垃圾回收消失 这样就存在一个问题变量死了但对象一直在没有num了
7.匿名内部类 (局部内部类中的匿名内部类)
最重要 重要重要
如果接口的实现类(或者是父类的子类)只需要使用唯一的一次
呢么这种情况下就可以省略掉该类的定义,而改为使用【匿名内部类】
匿名内部类的定义格式:
接口名称 对象名 = new 接口名称(){
//覆盖重写所有抽象方法
}; 注意:这有个分号
就是就不用创建【接口实现类】这样一个单独的类了,其实功能是一样的
8. 匿名对象类的注意事项
对格式 new 接口名称(){...};进行解析 1.new 代表创建对象的动作 2.接口名称就是匿名内部类需要实现哪些接口 3.{...}才是匿名内部类的内容 注意: 1.匿名内部类在【创建对象】时只能使用唯一一次。 如果希望多次创建对象,而且类的内容不一样的话就必须使用单独定义的实现类了。 2.匿名对象时调用方法时只用唯一一次,若是要调用多次,必须给对象起个名字 3.匿名内部类是省略了实现类或子类 匿名对象是省略了对象名称 强调匿名内部类和匿名对象不是一回事!!!
9.类作为成员变量类型
HERO类
Weapon类
psvm
10.接口作为成员变量类型
skill接口类
实现类
hero类
psvm
10.接口作为方法的参数或返回值
list这里是一个接口对象