普通(成员)内部类的格式:
访问修饰符 class 外部类的类名{
访问修饰符 class 内部类的类名{
内部类的类体;
}
}
普通内部类与我们使用的普通类没有区别,因为是内部类所有可以可以使用外部类中的私有方法。
package com.lagou.task10; /** * 编程实现普通内部类的定义和使用 - 文档注释 */ public class NormalOuter { private int cnt = 1; //定义普通的内部类,隶属于外部类的成员,并且是对象层级 public class NormalInter{ private String ia = "cnt"; public NormalInter(){ System.out.println("普通内部类的构造方法体执行到了!"); } public void show(){ System.out.println("外部类中变量cnt的数值为:"+cnt); System.out.println("ia = " + ia); } } }
内部类没有加static关键字修饰,内部类隶属于对象层级;对象层级必须先声明外部类的引用指向
外部类的对象;
(这里比较特殊)使用外部类的引用在new的前面使用,这里就可以成功创建内部类的对象了
package com.lagou.task10; public class NormalOuterTest { public static void main(String[] args) { //1.声明NormalOuter类型的引用指向该类型的对象 NormalOuter no = new NormalOuter(); //2.声明NormalOuter类中的内部类的引用指向内部类的对象 NormalOuter.NormalInter ni = no.new NormalInter(); ni.show(); } }
普通内部类的使用方式
普通内部类和普通类一样可以定义成员变量、成员方法以及构造方法等。
普通内部类和普通类一样可以使用final或者abstract关键字修饰。
普通内部类还可以使用private或者protected关键字进行修饰。
普通内部类需要使用外部类对象来创建对象。
如果内部类访问外部类中与本类内部同名的成员变量或方法时,需要使用this关键字。
假设内部类成员变量与外部类成员变量同名,我们如何使用this关键字在内部类成员方法中分别得到该数值?
1、在方法体内不加this关键字,得到局部变量
2、在方法体内加this关键字,得到内部类成员变量
3、如果想要得到外部内成员变量,必须使用外部类名.this的方式才能得到外部内成员变量。
public class NormalOuter { private int cnt = 1; //定义普通的内部类,隶属于外部类的成员,并且是对象层级 public class NormalInter{//内部类成员变量与外部类成员变量同名 private int cnt = 2;
public void show1(int cnt){ System.out.println("形参变量:" + cnt); } public void show2(int cnt){ System.out.println("形参变量:" + cnt); //局部优先原则 System.out.println("内部类:" + this.cnt); System.out.println("外部类:" + NormalOuter.this.cnt); } } }