Java嵌套类

来源:互联网 发布:淘宝网皮书包 编辑:程序博客网 时间:2024/05/16 14:35

本文来自于Java深入解析——透析Java本质的36个话题
Java的嵌套类分为 静态成员类(静态嵌套类)、内部类(非静态嵌套类)、嵌套接口。内部类还可以分为内部成员类、本地内部类、匿名内部类。

一、静态成员类

习惯上将它成为静态嵌套类。标记为在类中使用 static 声明的类。静态成员类可以访问外围类的任何成员,包括声明为private的成员。但是非静态的外围成员,则需要经过恰当的对象引用才能访问。因为是静态成员类,所以可以不依赖于外围类而独立存在并访问。在继承方面,静态成员类与外围类也没有什么区别,在访问权限允许的情况下,任何类都可以继承静态成员类,静态成员类也可以继承任何(允许继承的)类或者接口。

二、内部类

内部类与静态成员类不同之处在于,内部类与外围类紧密关联。从结构上说,内部类类似于类的实例变量,必须存在对象,才能够访问。所以,如果没有外围类对象存在,则不可能有内部类。而静态成员又是不需要对象就可以直接访问的,由于这种依赖与矛盾关系,内部类不可以申明为静态成员(包括静态成员变量、静态方法、静态成员类或嵌套接口)或静态初始化块。
不过内部类可以声明为编译时常量的final静态变量,因为编译器对final类型的变量进行了特殊处理,是将值直接写入字节码中,而不会生成变量的符号引用。

内部类绑定到外围对象

内部类必须要存在对象时才能访问。示例

package test;public class Out{    public static class Static{ }    public class Inner{ }    public void go(){        Out mout = new Out();        Out.Inner inner = mout.new Inner();    }}

此处的内部类Inner虽然构造函数没有接收参数,但是编译器会将Out对象 mout 作为参数传递进去。所以Inner其实是这样的

public class Inner{    final Out this$0;    public Inner(Out t){        this$0 = t;        super();    }}

此处的 this$0 是编译器自动生成。

内部类继承

public class InnerInheritance extends Outer.Inner{    public InnerInheritance(Outer outer){        outer.super();    }}calss Outer{    class Inner{ }}

本地内部类

public class LocalClass{    private int a = 1;    {        class Local1{};    }    static {        Class Local2{};    }    public LocalClass(){        int x = 2;        final int y = 3;        class Local3{            int w = y;            int q = a;            //int z = x; 不能访问非final 的局部变量        }    }    public TV method(){        //使用本地类实现某个接口,然后以接口形式返回        class Local4 implements TV{            @override            public void turnOn(){                System.out.println("Turn on the TV.");            }            @override            public void turnOff(){                System.out.println("Turn off the TV.");            }        }        return new Local4();    }}interface TV{    void turnOn();    void turnOff();}

匿名类

待续。。。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我在淘宝开个店卖衣服没人买怎么办 收货地址填错了卖家已发货怎么办 淘宝店上的供货商不发货怎么办 在淘宝买的花退到卖家后死了怎么办 在淘宝买东西付款开通了花呗怎么办 淘宝网投诉卖家也不处理问题怎么办 淘宝图片空间上传不了大图片怎么办 不小心把设置里打印机删掉了怎么办 电脑上qq不小心删掉了怎么办 进了一批款式不好卖的衣服怎么办? 淘宝首页图片不居中代码装的怎么办 小语言代码装修以后不是全屏怎么办 招教年龄超过4个月怎么办 淘宝上注册的店铺被别人用了怎么办 淘宝贷款后店铺转让了贷款怎么办 手机千牛发布宝贝类目找不到怎么办 亚马逊被移除销售权该怎么办 玉米煮水不够熟吃了怎么办 华为云手机找回关了找回手机怎么办 我的淘宝号被别人盗用开店怎么办 淘宝买东西发货了不想要了怎么办 两张单号一样罚款已被处理怎么办 58同城登录电话换了怎么办 在超市买的东西坏了怎么办 安卓系统无法安装第三方软件怎么办 金立手机报毒不能安装软件怎么办 js中下拉菜单被图片挡住怎么办 更换主机后用户名跟密码忘了怎么办 换手机号了京东账号登录不上怎么办 口令卡绑定时访问页面找不回怎么办 手机淘宝购物车不小心删除了怎么办 上淘宝网图片文字不清晰怎么办 淘宝店铺低消费人群占比多怎么办 微信只能在应用商城里面打开怎么办 淘宝买了特价商品店家不发货怎么办 红米5a装不下卡怎么办 红米3s流量太慢怎么办 红米3s触屏失灵怎么办 红米note的4g信号差怎么办 电信4g网速慢怎么办红米手机 红米3电信4g信号不好怎么办