文章申明:转载来源https://www.cnblogs.com/luohaonan/p/11326903.html
在类的类部可以定义类,叫做内部类。如果这个内部类被static修饰,此时内部的类叫做嵌套类。
内部类用在哪里,解决了什么问题?
内部类中一定包含的有外部类的引用,即Outer.this,
故,创建内部类,必须拥有外部类的实例。
public class Outer {
private String foo = "kitty";
class Inner{
Outer getOuter(){
// 在内部类中,可以通过dot this语法引用外部对象
// 即 Outer.this
return Outer.this;
}
public void bar(){
// 内部类可以访问外部类的任意属性
System.out.println(foo);
}
}
public static void main(String[] args) {
// 同过外部类dot内部类的方式 声明一个引用
Outer.Inner inner = null;
// 通过外部类实例dot new的方式创建一个内部类的实例
inner = new Outer().new Inner();
}
}
嵌套类:看一种单例的写法。
public class Singleton {
private static Singleton instance = null;
private static class Inner{
static{
instance = new Singleton();
}
}
public static Singleton getInstance(){
return instance;
}
}
其实,单例其他的写法也有其他的
public class Singleton {
private Singleton(){}
private static class Inner{
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance(){
return Inner.INSTANCE;
}
}
1. 内部类可以理所当然的访问外部类的成员变量,就好像内部类原本就拥有他们似的;
2. 内部类区别于嵌套类,嵌套类不依赖于外部类,可以单独被实例化,但是内部类的实例化必须有外部类的实例;
3. 内部类的实例化必须要有外部类的实例,通过外部类实例点new的方式创建内部类实例;
4. 内部类好像可以屏蔽一些细节,外面的类看不到这些细节。同时内部类实现一些接口我继承一些类从而具有一定的功能,通过这些功能完成对外部类的数据进行操作,而且,内部类的这些功能,外面的内有看不到,这样可以避免一些特定的方法或实现被其他代码调用;
5.内部类中可以通过外部类点this表示外部类的this。入Outer.this,这就是对外部类的引用;
6.现在看来内部类就是为了操作外部类的数据而存在的吧,内部类封装了一些特定但是很私有的一些功能。
帖子还没人回复快来抢沙发