内部类的基本概念

内部类的作用

内部类的分类

普通(成员)内部类的格式

public class NormalOuter {
private int cnt = 1;
public class NormalInner {
private int ia = 2;
public NormalInner(){
System.out.println("内部类的初始化");
}
public void show() {
System.out.println("外部变量中cnt的数值为:" + cnt);
System.out.println("ia =" + ia);
}
}
public static void main(String[] args) {
// 1.声明NormalOuter类型的引用指向该类型的对象
NormalOuter normalOuter = new NormalOuter();
// 2.声明NormalOUter类中内部类的引用指向内部类的对象
NormalOuter.NormalInner ni = normalOuter.new NormalInner();
// 3.调用内部类中的show方法
ni.show();
}
}
这部分就是如何声明及调用出内部类的流程与方法
// 1.声明NormalOuter类型的引用指向该类型的对象
NormalOuter normalOuter = new NormalOuter();
// 2.声明NormalOUter类中内部类的引用指向内部类的对象
NormalOuter.NormalInner ni = normalOuter.new NormalInner();
// 3.调用内部类中的show方法
ni.show();
普通内部类的使用方式

public class NormalOuter {
private int cnt = 1;
public class NormalInner {
private int ia = 2;
private int cnt = 3;
public NormalInner(){
System.out.println("内部类的初始化");
}
public void show() {
System.out.println("外部变量中cnt的数值为:" + cnt);
System.out.println("ia =" + ia);
}
public void show2(int cnt) {
System.out.println("形参变量cnt =" + cnt); // 局部优先原则
System.out.println("内部类中cnt =" + this.cnt);
System.out.println("外部类中cnt =" + NormalOuter.this.cnt);
}
}
}
上面这段代码给我们演示了内部类与外部类参数同名时的处理方式,下面演示调用
// 1.声明NormalOuter类型的引用指向该类型的对象
NormalOuter normalOuter = new NormalOuter();
// 2.声明NormalOUter类中内部类的引用指向内部类的对象
NormalOuter.NormalInner ni = normalOuter.new NormalInner();
ni.show2(10);
静态内部类
静态内部类的格式

public class StaticOuter {
private int cnt = 1;
private static int snt = 2;
public static class StaticInner {
private int ia = 3;
StaticInner(){
System.out.println("静态内部类的构造方法");
}
public void show() {
System.out.println("ia =" + ia); // 3
System.out.println("外部类中的snt =" + snt); // 2
// System.out.println("外部类中的cnt = " + cnt); // Error:静态上下文中不能访问非晶态的成员变量,因为此时可能还没创建对象
}
}
}
public class StaticOuterTest {
public static void main(String[] args) {
StaticOuter.StaticInner ni = new StaticOuter.StaticInner();
ni.show();
}
}
静态内部类的使用方法
public class StaticOuter {
private int cnt = 1;
private static int snt = 2;
public static void show() {
System.out.println("我是外部类中的show方法");
}
public static class StaticInner {
private int ia = 3;
private static int snt = 4;
StaticInner(){
System.out.println("静态内部类的构造方法");
}
public void show() {
System.out.println("ia =" + ia); // 3
System.out.println("外部类中的snt =" + snt); // 2
// System.out.println("外部类中的cnt = " + cnt); // Error:静态上下文中不能访问非晶态的成员变量,因为此时可能还没创建对象
}
public void show(int snt) {
System.out.println("snt = "+ snt); // 就近原则
System.out.println("内部类中的snt = "+ StaticInner.snt); // 4
System.out.println("外部类中的snt = "+ StaticOuter.snt); // 2
StaticOuter.show();
}
}
}
StaticOuter.StaticInner ni = new StaticOuter.StaticInner();
// ni.show();
ni.show(5);
打印结果
静态内部类的构造方法
snt = 5
内部类中的snt = 4
外部类中的snt = 2
我是外部类中的show方法
局部内部类
局部(方法)内部类的格式

局部内部类的使用方式

public class areaOuter {
private int cnt = 1;
public void show() {
// 定义一个局部变量进行测试,默认理解为final关键字修饰
// 虽然可以省略final关键字,但建议加上
int ic = 4;
//定义局部内部类,只有在当前方法体的内部好使
class AreaInner {
private int ia = 2;
public AreaInner(){
}
public void test(){
System.out.println("ia = "+ ia); // 2
System.out.println("cnt = " + cnt); // 1
System.out.println("ic = "+ ic); // 4 虽然没有加final,但是默认是final的ic,因为我们没有去尝试修改这个ic,所以没报错
}
}
AreaInner areaInner = new AreaInner();
areaInner.test();
}
}
public class areaOuterTest {
public static void main(String[] args) {
areaOuter area1 = new areaOuter();
area1.show();
}
}
网友评论