成员内部类

来源:互联网 发布:java中的initcause方法 编辑:程序博客网 时间:2024/06/16 03:02
内部类的类别:
1.成员内部类:
成员内部类的访问方式:
方式1:在外部类提供一个方法创建内部类的对象进行访问。
方式2:在其他类直接创建内部类的对象。格式:外部类.内部类 变量名 = new 外部类().new 内部类();
注意:如果是一个静态内部类,那么在其他类创建的格式:
外部类.内部类 变量名 = new 外部类.内部类();

内部类的应用场景:我们描述的A事物的时候,发现描述的A事物内部还存在另外一个比较复杂的B事物,而且这个比较复杂的事物B还需要访问A事物的属性等数据,那么这个时候我们就可以使用内部类描述B事物。
比如:人 --> 心脏
class 人{
氧气
等...

   class  心脏{
   }
}

内部类的好处:内部类可以直接访问外部类的所有成员。(例如:Iterator的迭代功能,内部类Itr能直接访问集合中的数据)
内部类要注意的细节:
1.如果外部类与内部类存在同名的成员变量时,在内部类中默认情况下是访问内部类的成员变量可以通过“外部类.this.成员变量名”指定访问外部类的成员.
2.私有的成员内部类只能在外部类提供一个方法创建内部类的对象进行访问,不能在其他类创建对象。
3.成员内部类一旦出现了静态的成员,那么该类也必须使用static修饰。
  1. /**
  2. * Author:Liu Zhiyong
  3. * Version:Version_1
  4. * Date:2016年6月12日20:53:39
  5. * Desc:内部类:一个类定义在另外一个类的内部,那么该类就称作为内部类
  6. 内部类的class文件名:外部类$内部类。好处:便于区分该class属于哪个外部类的
  7. 内部类的类别:
  8. 1.成员内部类:
  9. 成员内部类的访问方式:
  10. 方式1:在外部类提供一个方法创建内部类的对象进行访问。
  11. 方式2:在其他类直接创建内部类的对象。格式:外部类.内部类 变量名 = new 外部类().new 内部类();
  12. 注意:如果是一个静态内部类,那么在其他类创建的格式:
  13. 外部类.内部类 变量名 = new 外部类.内部类();
  14. 内部类的应用场景:我们描述的A事物的时候,发现描述的A事物内部还存在另外一个比较复杂的B事物,而且这个
  15. 比较复杂的事物B还需要访问A事物的属性等数据,那么这个时候我们就可以使用内部类描述B事物。
  16. 比如:人 --> 心脏
  17. class 人{
  18. 氧气
  19. 等...
  20. class 心脏{
  21. }
  22. }
  23. 内部类的好处:内部类可以直接访问外部类的所有成员。
  24. 内部类要注意的细节:
  25. 1.如果外部类与内部类存在同名的成员变量时,在内部类中默认情况下是访问内部类的成员变量
  26. 可以通过“外部类.this.成员变量名”指定访问外部类的成员.
  27. 2.私有的成员内部类只能在外部类提供一个方法创建内部类的对象进行访问,不能在其他类创建对象。
  28. 3.成员内部类一旦出现了静态的成员,那么该类也必须使用static修饰。
  29. 原因:
  30. 2.局部内部类:
  31. */
  32. //外部类
  33. class Outer{
  34. static int i = 100;//成员变量 Outer.class文件被加载到内存的时候存在内存中。静态的成员数据是不需要对象存在才能访问。
  35. //成员内部类
  36. static class Inner{//内部类的class文件名:外部类$内部类。好处:便于区分该class属于哪个外部类的
  37. int j = 10;
  38. static int i = 200;
  39. //int i = 200;
  40. public void print(){
  41. System.out.println("这个是成员内部类的print方法" + this.i);
  42. }
  43. }
  44. //在外部的方法中创建了内部类的对象,然后调用内部方法
  45. public void instance(){
  46. Inner inner = new Inner();
  47. inner.print();
  48. }
  49. }
  50. //其他类
  51. class Demo59
  52. {
  53. //内部类的class文件名:外部类$内部类。好处:便于区分该class属于哪个外部类的
  54. class Inner
  55. {
  56. }
  57. public static void main(String[] args){
  58. System.out.println(Outer.Inner.i);
  59. /*
  60. Outer outer = new Outer();
  61. outer.instance();
  62. Outer.Inner inner = new Outer().new Inner();
  63. inner.print();
  64. */
  65. Outer.Inner inner = new Outer.Inner();
  66. }
  67. }
0 0
原创粉丝点击