java常见面试考点
往期文章推荐:
java常见面试考点(二十三):消息队列
java常见面试考点(二十四):强引用,软引用,虚引用,弱引用
java常见面试考点(二十五):CAS是什么
java常见面试考点(二十六):集合类不安全
java常见面试考点(二十七):java里的锁总结
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权);
本博客的内容来自于:java常见面试考点(二十八):内部类详解;
学习、合作与交流联系q384660495;
本博客的内容仅供学习与参考,并非营利;
一、前言
在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。下面就先来了解一下这四种内部类的用法。
为什么要使用内部类?在《Think in java》中有这样一句话:使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。
在我们程序设计中有时候会存在一些使用接口很难解决的问题,这个时候我们可以利用内部类提供的、可以继承多个具体的或者抽象的类的能力来解决这些程序设计问题。可以这样说,接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整。
其实使用内部类最大的优点就在于它能够非常好的解决多重继承的问题,但是如果我们不需要解决多重继承问题,那么我们自然可以使用其他的编码方式,但是使用内部类还能够为我们带来如下特性(摘自《Think in java》):
1、内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。
2、在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。
3、创建内部类对象的时刻并不依赖于外围类对象的创建。
4、内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。
5、内部类提供了更好的封装,除了该外围类,其他类都不能访问。
二、实例内部类
- 实例内部类是 属于对象的内部类,是不属于类的,不使用static修饰的内部类
意思就是把这玩意儿看成是一个对象,别把他当类看
- 想要使用内部类必须得要先创建外部类
- 在实例内部类中存在对外部类的引用
意思就是实例内部类在堆中开辟的空间里面不仅存放着自己的字段方法和this地址,还有外部类的地址,内部类可以访 外部类当中的成员
- 外部类不能直接访问内部类当中的成员
意思是 我们要把‘实例内部类’看作对象,而不是类,因此内部类中的成员变量不能使用static修饰,因为static是属于‘类’的字段和方法,而实例内部类是对象。如果强行写上,编译器会报错。
成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。
class Circle {
private double radius = 0;
public static int count =1;
public Circle(double radius) {
this.radius = radius;
}
class Draw {
//内部类
public void drawSahpe() {