内部类.Java学习

打印 上一主题 下一主题

主题 522|帖子 522|积分 1566

今天复习一下Java里面一个比较重要的概念  内部类

 局部内部类


  • 内部类是定义在一个类的内部。通常是在方法中。
  • 本质还是一个类,可以访问外部类的所有成员,包含私有的。
  • 不能使用访问修饰符。但是可以使用final修饰符。
  • 作用域尽在定义它的方法或者代码块中。
  • 外部其他类不能访问局部内部类(因为局部内部类的地位就是衣个局部变量)。
  • 如果外部类和局部类的成员变量重名。遵守就近原则。如果要访问外部类变量。 可以通过 类型.this.成员 去访问。
匿名内部类


  • 该类没有名字。
  • 是一个对象。
  • 定义外部类的局部位置,比如方法中,并且没有类名。(系统底层会分配一个类型)。
  •  匿名内部类使用一次就没了(生成的对象是可以多次使用)。
  • 匿名内部类是为了简化开发。
 
  1. 1 package anonymous;
  2. 2
  3. 3 public class InnerClass {
  4. 4     public static void main(String[] args) {
  5. 5         new Test().run();
  6. 6     }
  7. 7 }
  8. 8
  9. 9
  10. 10 class Test {
  11. 11
  12. 12     public void run() {
  13. 13         Animal dog = new Animal() {
  14. 14             @Override
  15. 15             public void Say() {
  16. 16                 System.out.println("小狗汪汪");
  17. 17                 System.out.println(this.getClass());
  18. 18             }
  19. 19         };
  20. 20         dog.Say();
  21. 21     }
  22. 22 }
  23. 23
  24. 24
  25. 25 interface Animal {
  26. 26     void Say();
  27. 27 }
复制代码
 

----------
输出结果。
    小狗汪汪
    class anonymous.Test$1
成员内部类


  •  定义为的位置是成员位置。
  • 外部其他类可以调用成员内部类。
 
  1. 1 package anonymous;
  2. 2
  3. 3 public class MemberInnerClass {
  4. 4     public static void main(String[] args) {
  5. 5         Test01 test01 = new Test01();
  6. 6         Test01.InnerClass innerClass = test01.new InnerClass();
  7. 7         innerClass.Run();
  8. 8     }
  9. 9 }
  10. 10
  11. 11 class Test01 {
  12. 12
  13. 13     class InnerClass {
  14. 14         public void Run() {
  15. 15             System.out.println("这是成员内部类");
  16. 16         }
  17. 17     }
  18. 18 }
复制代码
 
静态内部类


  • 静态内部类还是定义在成员位置,但是他有static修饰。
  • 可以直接访问外部类的所有静态成员,包括私有的。但是不能直接访问非静态的成员。
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81428

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表