java 访问内部类的属性_java内部类深入详解 内部类的分类 特点 定义方式 使用...

本文关键词:

java内部类 内部类的分类 特点  定义方式 使用   外部类调用内部类 多层嵌套内部类  内部类访问外部类属性  接口中的内部类  内部类的继承  内部类的覆盖  局部内部类 成员内部类 静态内部类 匿名内部类

内部类定义

将一个类定义放到另一个类的内部,这就是内部类

内部类与组合是完全不同的概念

内部类指的是类的定义在内部

看起来像一种代码隐藏机制

但是,远不止于此,因为他了解外部类 并且能够通信

内部类的代码,可以操作创建它的外部类的对象

所以可以认为内部类提供了某种进入其外部类的窗口

内部类特点

内部类访问外部类不需要任何特殊条件,拥有外部类所有的访问权

也就是对于内部类访问外部类的元素这件事情上

他就相当于是外部类本身一样随便访问

内部类的创建依赖外部类对象

可以直接访问外部类的变量

也可以直接指明

外部类类名.this.变量名

this通常是多余的,可以省略

内部类不仅能够访问包含他的外部类,还可以访问局部变量

但是局部变量必须被声明为final

因为局部内部类会将调用的变量进行拷贝,为了保证一致性,所以变量必须为final

内部类就是隐匿在外部类内部的一个独立的个体,不存在is a  like a

内部类的对象必定秘密的捕获了一个指向外部类对象的引用

然后以此访问外部类的成员,编译器处理了所有的细节,对我们来说都是透明的

public classO {classI{

O get() {return O.this;

}

}public static voidmain(String[] args) {

O outer= newO();

O.I inner= outer.newI();

System.out.println(outer==inner.get());

}

}

打印结果为:

true

内部类持有的外部类对象就是外部类对象本身,内存地址是相同的

外部类的作用域之外,可以使用  outerClass.innerClass  方式引用内部类

可以对同一个包中其他类隐藏

内部类可以声明为私有的

每个类都会产生一个.class文件,包含了类的元信息

如果内部类是匿名的,编译器会简单的产生一个数字作为标识符形如 Outer$1.class

否则就是形如  外部类$内部类.class   ,虚拟机看来与其他类无差,这也是编译器做的工作

普通的类(外部类)只能用public修饰符修饰,或者不写修饰符 使用默认的,但是内部类可以使用private 与protected

内部类可以达到类似"多重继承"的效果,

每个内部类都能独立的继承自一个(接口的)实现

无论外部类是否已经继承了某个(接口的)实现

也就是说 单个外部类,可以让多个内部类以不同的方式实现同一个接口或者继承同一个类

一个外部类可以创建多个内部类,这是不是就达到了类似"多重继承"的效果呢

内部类分类

成员内部类

局部内部类

匿名内部类

静态内部类

成员内部类

成员内部类也叫实例内部类。每一个外部类对象都需要一个内部类的实例,内部类离不开外部类存在

既然是成员内部类,和成员属性成员方法地位上自然没有什么不同

每个外部类对象都有一个内部类对象,自然持有外部类的引用

Outer outer = newOuter();

Outer.Inner inner= outer.new Inner();//注意是对象.new

局部内部类

局部内部类不能用public或者private或者protected访问说明符,作用域被限定在了声明这个局部内部类中了

很好理解,局部的就跟方法变量一样,限定在了{}之中,自然就不需要设置访问说明符了,而且你可以想下,也只有类以及类的成员有访问修饰符,局部变量有访问修饰符么

局部类可以

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值