青岛网站如何制作,做面包的网站,小企业网站源码,做视频教学网站内部类不是很好理解#xff0c;但说白了其实也就是一个类中还包含着另外一个类如同一个人是由大脑、肢体、器官等身体结果组成#xff0c;而内部类相当于其中的某个器官之一#xff0c;例如心脏#xff1a;它也有自己的属性和行为(血液、跳动)显然#xff0c;此处不能单方…内部类不是很好理解但说白了其实也就是一个类中还包含着另外一个类如同一个人是由大脑、肢体、器官等身体结果组成而内部类相当于其中的某个器官之一例如心脏它也有自己的属性和行为(血液、跳动)显然此处不能单方面用属性或者方法表示一个心脏而需要一个类而心脏又在人体当中正如同是内部类在外部内当中实例1内部类的基本结构//外部类class Out {private int age 12;//内部类class In {public void print() {System.out.println(age);}}}public class Demo {public static void main(String[] args) {Out.In in new Out().new In();in.print();//或者采用下种方式访问/*Out out new Out();Out.In in out.new In();in.print();*/}}运行结果12从上面的例子不难看出内部类其实严重破坏了良好的代码结构但为什么还要使用内部类呢因为内部类可以随意使用外部类的成员变量(包括私有)而不用生成外部类的对象这也是内部类的唯一优点如同心脏可以直接访问身体的血液而不是通过医生来抽血程序编译过后会产生两个.class文件分别是Out.class和Out$In.class其中$代表了上面程序中Out.In中的那个 .Out.In in new Out().new In()可以用来生成内部类的对象这种方法存在两个小知识点需要注意1.开头的Out是为了标明需要生成的内部类对象在哪个外部类当中2.必须先有外部类的对象才能生成内部类的对象因为内部类的作用就是为了访问外部类中的成员变量实例2内部类中的变量访问形式class Out {private int age 12;class In {private int age 13;public void print() {int age 14;System.out.println(局部变量 age);System.out.println(内部类变量 this.age);System.out.println(外部类变量 Out.this.age);}}}public class Demo {public static void main(String[] args) {Out.In in new Out().new In();in.print();}}运行结果局部变量14内部类变量13外部类变量12从实例1中可以发现内部类在没有同名成员变量和局部变量的情况下内部类会直接访问外部类的成员变量而无需指定Out.this.属性名否则内部类中的局部变量会覆盖外部类的成员变量而访问内部类本身的成员变量可用this.属性名访问外部类的成员变量需要使用Out.this.属性名实例3静态内部类class Out {private static int age 12;static class In {public void print() {System.out.println(age);}}}public class Demo {public static void main(String[] args) {Out.In in new Out.In();in.print();}}运行结果12可以看到如果用static 将内部内静态化那么内部类就只能访问外部类的静态成员变量具有局限性其次因为内部类被静态化因此Out.In可以当做一个整体看可以直接new 出内部类的对象(通过类名访问static生不生成外部类对象都没关系)实例4私有内部类class Out {private int age 12;private class In {public void print() {System.out.println(age);}}public void outPrint() {new In().print();}}public class Demo {public static void main(String[] args) {//此方法无效/*Out.In in new Out().new In();in.print();*/Out out new Out();out.outPrint();}}运行结果12如果一个内部类只希望被外部类中的方法操作那么可以使用private声明内部类上面的代码中我们必须在Out类里面生成In类的对象进行操作而无法再使用Out.In in new Out().new In() 生成内部类的对象也就是说此时的内部类只有外部类可控制如同是我的心脏只能由我的身体控制其他人无法直接访问它实例5方法内部类class Out {private int age 12;public void Print(final int x) {class In {public void inPrint() {System.out.println(x);System.out.println(age);}}new In().inPrint();}}public class Demo {public static void main(String[] args) {Out out new Out();out.Print(3);}}运行结果312在上面的代码中我们将内部类移到了外部类的方法中然后在外部类的方法中再生成一个内部类对象去调用内部类方法如果此时我们需要往外部类的方法中传入参数那么外部类的方法形参必须使用final定义至于final在这里并没有特殊含义只是一种表示形式而已