内部类的基本概念
内部类
内部类,直观的理解就是,定义在另一个类中的类。
内部类的作用
1- 代码组织,整合逻辑相关的代码。
2- 代码隐藏。
3- 可以表现内部类对于外部类之间的关系。(例如:(依赖关系) 某种形式的内部类只有在外部类对象存在的情况下,才能够被创造。)
4-内部类 能够 看到外部类的全部。
5- 外部类也可以看到内部类的私有成员。
(内部类,外部类就像一对夫妻)
内部类的使用
内部类的权限
实例1 :
- 为了体现内部类的权限,这里将外部类的成员提到了最严格的权限(private)。
- 使用的是静态内部类,这样子我就不需要创建实例。
- 在内部类的方法show()中,我访问了外部类的 私有字符串。【可以看出内部类的特性】
public class TestBasicInner {
private static String outerStr = "**hello outer**";
public static void main(String[] args) {
Inner.show();//静态内部类
}
public static class Inner{
public static void show(){
System.out.println("the outer string is : " + outerStr);
}
}
}
内部类与外部类之间的相互依赖
- 包括内部类对象与外部类对象间的依赖。
- 静态方法,对象方法之间的依赖。
实例2 :
1. 探究内部类非静态情况下的特性。
2. 内部类对象的创建 依赖于 外部类的对象。
3. 外部对象能够看到 内部类对象的私有方法。
4. 内部类,外部类的方法,成员变量 是共享的(当然不能越过静态,非静态的界限)。【从这个角度来看,可以看作一个一体的类 —> private,public对于彼此失去了内部的意义,是一致对外的,团结内部的】
public class TestBasicInnerWithObject {
private String outerStr = "**hello outer**"; //非static.
public static void main(String[] args) {
//1.创建外部对象。
TestBasicInnerWithObject outer = new TestBasicInnerWithObject();
//2.Inner类是非静态的,所以**依赖于外部对象**才能存在。
//【错误写法】Inner in = new TestBasicInnerWithObject.Inner();
//3.创建内部类对象。
Inner in = outer.new Inner();
//4.调用内部类的公共方法。
in.show();
//5.可以看到私有方法。
outer.callInnerPrivate(in);
}
public void callInnerPrivate(Inner in){
in.privateShow();
}
public class Inner{// 非static .
public void show(){// 非static.
System.out.println("the outer string is : " + TestBasicInnerWithObject.this.outerStr);
}
private void privateShow(){ //对象的私有方法。
System.out.println("this is private !!!");
}
}
}
输出结果:
the outer string is : **hello outer**
this is private !!!