A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qihuan 中级黑马   /  2015-7-5 12:19  /  576 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package practice;

  2. /**
  3. * 内部类
  4. *         概念:将一个类定义在另一个类的里面,对里面的类就称为内部类。
  5. *
  6. *         访问特点:        1.内部类可以直接访问外部类中的成员,包括私有成员。
  7. *                                 之所以可以直接访问外部类的成员,是因为内部类中有一个外部类的引用(外部类名.this)
  8. *                         2.外部类要访问内部类的成员必须建立内部类的对象。
  9. *
  10. *         Tips:        1.当内部类中定义了静态成员,则该内部类必须是静态的。
  11. *                         2.当外部类中的静态方法访问内部类时,内部类必须是静态的。
  12. *                         3.内部类定义在局部时,不可以被成员修饰符修饰;可以直接访问外部类中的成员,
  13. *                                   但是不可以访问它所在的局部中的变量,除非用final修饰。
  14. *
  15. *         其他知识点:
  16. * 匿名内部类:
  17. * 1.是内部类的简写格式。
  18. * 2.定义匿名内部类的前提:内部类必须是继承一个类或实现接口。
  19. * 3.匿名内部类的格式:new 父类或者是接口(){定义子类的内容}
  20. * 4.匿名内部类就是一个匿名子类对象。
  21. * 5.匿名内部类中定义的方法最好不要超过3个。
  22. * @author Qihuan
  23. *
  24. */

  25. class Outer {
  26.         private static int NUM = 1;
  27.        
  28.         static class Inner {
  29. //                int num = 2;
  30.                 private static void iFun() {
  31. //                        int num = 3;
  32. //                        System.out.println("Inner:"+Outer.this.NUM);
  33. //                        System.out.println("Inner:"+this.num);
  34.                         System.out.println("Inner:"+NUM);
  35.                 }
  36.                
  37.                
  38.         }
  39.        
  40.         public void showInner() {
  41.                 new Outer.Inner();
  42.                 Inner.iFun();
  43.         }
  44.        
  45.         void oFun() {
  46.                 System.out.println("Outer:"+NUM);
  47.                 Inner.iFun();
  48.         }
  49. }

  50. public class InnerClassPractice {
  51.         public static void main(String[] args) {
  52. //                Outer o = new Outer();
  53. //                o.oFun();
  54. //                //直接访问内部类中的成员。
  55. //                Outer.Inner oi = new Outer().new Inner();
  56. //                oi.iFun();
  57. //                //直接访问静态内部类中的非静态成员
  58. //                new Outer.Inner().iFun();
  59. //                //直接访问静态内部类中的静态成员
  60. //                Outer.Inner.iFun();
  61.                 new Outer().showInner();
  62.         }
  63. }
复制代码
  1. package practice;

  2. /**
  3. * 练习:
  4. * 1.通过匿名内部类补足代码
  5. *                 Test.function().method();
  6. *                 分析:Test类中有一个静态的方法:function。
  7. *                         .method():function这个方法运算后结果是一个对象。
  8. *                         而且是一个Inter类型的对象。
  9. *                         因为只有是Inter类型的对象才可以调用method方法。
  10. *
  11. * 2.若没有定义父类或接口,怎么实现匿名内部类?
  12. *                 通过Object类来实现。
  13. * @author Qihuan
  14. *
  15. */
  16. interface Inter{
  17.         void method();
  18. }

  19. class Test{
  20.         //通过匿名内部类补足代码
  21.        
  22. //        static class Inner implements Inter{
  23. //                public void method() {
  24. //                        System.out.println("hello");
  25. //                }
  26. //        }
  27.        
  28.         static Inter function(){
  29.                
  30. //                return new Inner();
  31.                
  32.                 return new Inter(){
  33.                         public void method(){
  34.                                 System.out.println("匿名内部类练习1");
  35.                         }
  36.                 };
  37.         }
  38. }

  39. class InnerClassTest{
  40.         public static void main(String[] args) {
  41.                 Test.function().method();
  42.                 //分析:Test类中有一个静态的方法:function。
  43.                 //.method():function这个方法运算后结果是一个对象。而且是一个Inter类型的对象。
  44.                 //因为只有是Inter类型的对象才可以调用method方法。
  45.                
  46.                
  47.                 //练习2、
  48.                 new Object() {
  49.                         public void function(){
  50.                                 System.out.println("匿名内部类练习2");
  51.                         }
  52.                 }.function();
  53.         }
  54. }
复制代码



4 个回复

倒序浏览
谢谢了  我先收藏了
回复 使用道具 举报
写的不错
回复 使用道具 举报
谢谢了  我先收藏了
回复 使用道具 举报
内部类重点 一定收藏
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马