zoukankan      html  css  js  c++  java
  • java内部类

    1.成员内部类、局部内部类、匿名内部类和静态内部类

    外部类访问权限:public 不修饰

    成员内部类访问权限:private访问权限、protected访问权限、public访问权限及包访问权限

    如果用protected修饰,则只能在同一个包下或者继承外部类的情况下访问;

    成员内部类可以问外部类的所有成员属性和成员方法(包括private成员和静态成员),编译器会默认为成员内部类添加了一个指向外部类对象的引用,为内部类构造函数添加一个指向外部类对象的一个引用的参数

    成员内部类是依附外部类而存在的,也就是说,如果要创建成员内部类的对象,前提是必须存在一个外部类的对象;

    内部类中的this指的是内部类的实例对象本身,如果要用外部类的实例对象就可以用类名.this的方式获得;

    内部类对象中不能有静态成员,原因很简单,内部类的实例对象是外部类实例对象的一个成员。

    2.局部内部类

    局部内部类是定义在一个方法的类,它和成员内部类的区别在于局部内部类的不能设置访问权限;

    局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的;

    局部内部类不能访问定义它的方法内的局部变量,除非这个变量被定义为final;

    3.匿名内部类

    匿名内部类是唯一一种没有构造器的类

    4.静态内部类

    从前面可以知道,静态内部类是不依赖于外部类的,也就说可以在不创建外部类对象的情况下创建内部类的对象。另外,静态内部类是不持有指向外部类对象的引用的,这个读者可以自己尝试反编译class文件看一下就知道了,是没有Outter this&0引用的。

    为什么局部内部类和匿名内部类只能访问局部final变量?

    编译成两个类,就是两个不同变量,为了变量保持一致性,用final修饰

    Java采用了 复制  的手段来解决这个问题

  • 相关阅读:
    Win10删除anaconda重装
    anaconda python no module named 'past'的解决方法
    detectMultiScale 读取冲突的一个解决方法
    [原] Android快速开发框架-AndroidFine,GitHub开源
    [原] Android 自定义View 密码框 例子
    [原]发布一个jQuery提示框插件,Github开源附主站,jquery.tooltips.js
    [原] Jenkins Android 自动打包配置
    [原] Android性能优化方法
    阿里云9折推荐码:0LGVW2
    [原]那些年整理的Linux常用命令,简单明了
  • 原文地址:https://www.cnblogs.com/lelouchKOP/p/5787524.html
Copyright © 2011-2022 走看看