16-内部类

1.内部类的概念和分类

类就是来模拟事物的

如果一个事物的内部包含另一个事物,呢么这就是一个类内部包含另一个类(外部包含内部) 例如身体与心脏 汽车与发动机的关系 比如发动机一定要在汽车内部工作,掏出来就没有用了

分类: 成员内部类

             局部内部类(包含匿名内部类)

2.成员内部类定义

成员内部类定义格式
修饰符 class 外部类名称{
   修饰符 class 内部类名称{

   //...
   }
   //...
}
注意:内用外可以随意访问,权限不受影响;但是外用内,一定需要借助内部类对象

3.成员内部类的使用

如何使用成员内部类
方法
1.在外部类的方法当中,使用内部类,然后main只是调用外部类的方法。【间接方式】
2.公式:
类名称 对象名 = new  类名称();  一般创建对象方法
这里直接调用: 外部类名称.内部类名称 对象名 = new 外部类名称().new内部类名称()
两边都是外点内(大点小)

Baby类

扫描二维码关注公众号,回复: 13161333 查看本文章

 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这里是一个接口对象  

猜你喜欢

转载自blog.csdn.net/shwjakak/article/details/120515387