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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 百里青山 高级黑马   /  2016-4-9 12:21  /  204 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

内部类定义:是定义在另一个类中的类。
内部类的作用:
  • 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。
  • 内部类可以对同一个包中的其他类隐藏起来。
  • 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。
内部类点滴:
  • 只有内部类可以是私有类,而常规类只能具有包可见性或者公有可见性。
  • 内部类对象拥有一个对外围类对象的隐式引用,这个引用是通过内部类构造器传递过来的,编译器会对这个构造器进行修改,以便添加一个外围类的引用参数。(注:这是一个编译器行为)
  • 内部类的特殊语法规则。OutClass.this引用外部类对象,OuterObject.new InnerClass(args)创建内部类
  • 内部类的内部
  • 局部内部类。不能用public或者private访问控制符进行声明,引用的局部变量是final的。(想想为什么是final的?因为内部类会备份一份final的局部变量,是为了直到他执行的时候变量的值没有发生变化)
  • 静态内部类。使用内部类是为了把一个类隐藏在另一个类的内部,并不需要内部类的引用外围类对象。为此,可以将内部类声明为static,以便取消引用,当然只有内部类可以声明为static,静态内部类的对象除了没有对生成它的外围类对象的引用特权外,与其他的所有内部类完全一样。
public class CheckBox {
    private boolean checked;
     
    //这个内部类是包可见性,只有包含它的外围类和它所在的包中的其他类能访问到它,当然子类也可以访问的到
    class OnClickListener{
        //虽然是public,由于类本身是包访问权限,所以受限于包权限
        public void itemClick(){
            System.out.println("我被点击了");
        }
    }
     
    //不写操作修饰符,默认的是default,包访问权限
    boolean isChecked(){
        return checked;
    }
     
    //这个内部类是完全公开的,可以被外部其他包的类访问
    public class onDoubleClickListener{
        //可以被访问的到
        public void itemClick(){
            System.out.println("我被双击了");
        }
    }
     
    //只可以被外围类访问的到
    private class onMouseOverListener{
        //受限于类本上是private,所以只有外围类能访问的到
        public void itemOver(){
            System.out.println("鼠标飘过去了");
        }
    }
}


0 个回复

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