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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fmi110 高级黑马   /  2015-9-24 17:13  /  254 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

a
  1. 12、内部类
  2.                 定义:
  3.                         将一个类定义在另一个类内部,里面的那个类就成为内部类。
  4.                 访问特点:
  5.                         内部类可以直接访问外部类中的成员,包括私有成员
  6.                         外部类要访问内部类的成员必须建立内部类的对象
  7.                 内部类的位置:
  8.                         内部类定义在成员位置上,可以被private、 static成员修饰符修饰。 被static修饰的内部类只能访问外部类中
  9.                         的静态成员。
  10.                        
  11.                         如果内部类是静态的,内部类成员也是静态的,可以不用创建内部类对象,直接调用。
  12.                         事实上,内部类含有静态成员时,内部类必须声明为静态类
  13.                 ————————————————————————————————————————————————————————————————————
  14.                                  class InnerDemo{
  15.                                         public static void main(String[] args) {
  16.                                                 new Outer().new Inner1().show();
  17.                                                 Outer.Inner.show();//内部类为静态,且成员也是静态时,可直接通过类名访问
  18.                                         }
  19.                                 }
  20.                                 class Outer{
  21.                                         private int num = 8;
  22.                                         private static String str = "Outer static argument";
  23.                                         public void show(){
  24.                                                 System.out.println("Outer show()");
  25.                                         }
  26.                                         class Inner1{ //内部类
  27.                                                 public void show(){
  28.                                                         System.out.println("Inner1 show(),num = "+num+".."+str);
  29.                                                 }public
  30.                                         }
  31.                                         static class Inner{ //有静态成员时,必须声明为静态类
  32.                                                 public static void show(){
  33.                                                         System.out.println("Inner static show(),num = "+str);
  34.                                                 }
  35.                                         }
  36.                                 }
  37.                                 输出结果:
  38.                                 Inner1 show(),num = 8..Outer static argument
  39.                                 Inner static show(),num = Outer static argument
  40.                 ————————————————————————————————————————————————————————————————————
  41.                 PS:
  42.                 1、 如果内部类中定义了静态成员,该内部类也必须是静态的
  43.                 2、 为什么内部类能直接访问外部类中的成员呢?
  44.                         那是因为内部类持有了外部类的引用,外部类名.this。
  45.                 3、 内部类定义在局部位置上,也可以直接访问外部类中的成员。
  46.                         同时可以访问所在局部中的局部变量,但必须是被final修饰的。
  47.                         加final后,局部变量变为常量,存储在常量池,生命周期不会再随方法调用结束而消失
  48.                         所以可以被访问。
  49.                
  50.         13、匿名内部类
  51.                 定义:
  52.                         就是内部类的简化写法。
  53.                 前提:
  54.                         内部类可以继承或实现一个外部类或者接口。
  55.                 格式:
  56.                         new 外部类名或者接口名(){覆盖类或者接口中的代码,(也可以自定义内容。 )}
  57.                 简单理解:
  58.                         就是建立一个带内容的外部类或者接口的子类匿名对象。
  59.                 什么时候使用匿名内部类呢?
  60.                         通常使用方法是接口类型参数,并且该接口中的方法不超过三个,可以将匿名内部类作为参数传递。
  61.                 好处:
  62.                         增强阅读性。
  63.                
  64.                 //匿名内部类
  65.                         interface Inter{
  66.                                 public abstract void show();
  67.                         }
  68.                         class Outer{
  69.                                 public void method(){
  70.                                         Inter in = new Inter(){//变量in只是引用变量,指向了一个匿名的内部类实例
  71.                                                 @Override
  72.                                                 public void show() {
  73.                                                         System.out.println(".... show .....");
  74.                                                 }
  75.                                         };
  76.                                         in.show();
  77.                                 }
  78.                         }
  79.                         public class InnerDemo{
  80.                                 public static void main(String[] args) {
  81.                                         new Outer().method();
  82.                                 }
  83.                         }
  84.                         //输出结果:
  85.                         //.... show .....
复制代码


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马