对接网站建设是什么意思,网站建设案例赏析,设计制作小车的基本步骤是,营销型网站建设需要懂什么什么是内部类#xff1f;当一个事物的内部#xff0c;还有一个部分需要一个完整的结构进行描述#xff0c;而这个内部的完整的结构又只为外部事物提供服 务#xff0c;那么这个内部的完整结构最好使用内部类。在 Java 中#xff0c;可以将一个类定义在另一个类或者一个方法… 什么是内部类当一个事物的内部还有一个部分需要一个完整的结构进行描述而这个内部的完整的结构又只为外部事物提供服 务那么这个内部的完整结构最好使用内部类。在 Java 中可以将一个类定义在另一个类或者一个方法的内部前者称为内部类后者称为外部类。内部类也是封装的一种体现。 class Teacher{private String name;private int age;class Friend{//内部类}}内部类必须在类的里面不然即使它们在同一个文件也不是内部类并且内部类和外部类共用同一个java源文件但是经过编译之后内部类会形成单独的字节码文件 其中外部类的字节码文件名为Teacher.class而内部类的字节码文件为TeacherFriend.class。有没有发现这些字节码文件名的规律是不是类名后加一个.class啊如果是内部类的话则在前面加上外部类的名和就行。那么内部类里面能不能再添加一个内部类呢当然可以并且它的字节码文件和前面的规律一样。都是在外部类名后面加比如TeacherFriendStudent.class。一个类里面可以有多个内部类但是还是不建议在类里面定义多个内部类。 内部类的分类 根据内部类定义的位置不同一般可以分为以下几种形式 1. 成员内部类(普通内部类未被static修饰的成员内部类 和 静态内部类被static修饰的成员内部类) 2. 局部内部类(不谈修饰符)、匿名内部类 注意内部类其实日常开发中使用并不是非常多日常开始中 使用最多的是匿名内部类。实例内部类即未被static修饰的成员内部类。 class Teacher{private String name;private int age;class Friend{private String name;private int age;private int height;}} 既然被叫做成员内部类那么是否有和成员变量一样的性质呢我们都知道当我们创建一个对象时里面的成员变量都会被创建那么如果我创建外部类对象时内部类是否会被创建呢答案是不会内部类对象需要我们手动创建那么我们可不可以单单只创建实例内部类对象而不创建外部类对象呢这可不行它是属于外部类的怎么可能外部类对象儿子还没生出就生出内部类对象孙子呢滑稽。那么我们应该如何创建内部类对象呢我们应先创建外部类对象然后用对象名来(.)来创建内部类对象。 Teacher teacher new Teacher();
Teacher.Friend friend1 teacher.new Friend();
Teacher.Friend friend2 new Teacher().new Friend(); 对象名前面的就是它的类型那么可不可以不加Teacher呢很可惜不行如果你不写前面的话那我们怎么确定它到底是外部类还是内部类是谁的内部类啊。如果内部类中的成员变量的名字与外部类的成员变量的名字相同的话我们如何在内部类中使用外部类变量我们不可能用super虽然我前面说它们是父子但它们关系却并不是父子关系因此我们得使用其他方法去使用要在内部类中使用外部类变量的话我们只需这么写 name Teacher.this.name;//内部调用外部后面的是内部类成员 我们得知道实例内部类的注意事项才能更好的使用它 1. 外部类中的任何成员都可以在实例内部类方法中直接访问 2. 实例内部类所处的位置与外部类成员位置相同因此也受public、private等访问限定符的约束 3. 在实例内部类方法中访问同名的成员时优先访问自己的如果要访问外部类同名的成员必须外部类名称.this.同名成员 来访问。 4. 实例内部类对象必须在先有外部类对象前提下才能创建 5. 实例内部类的非静态方法中包含了一个指向外部类对象的引用 6. 外部类中不能直接访问实例内部类中的成员如果要访问必须先要创建内部类的对象。 静态内部类被static修饰的内部成员类称为静态内部类。 静态内部类与实例内部类的用法大差不差只有两个注意事项。 1. 在静态内部类中只能访问外部类中的静态成员 2. 创建静态内部类对象时不需要先创建外部类对象 Teacher.Student student new Teacher.Student();
Teacher teacher new Teacher();
Teacher.Student student1 teacher.new Student();//报错 若static修饰成员变量的话虽然java不建议通过对象来使用静态成员变量但是任然可以正常运行不过如果static修饰内部类的话则不能通过对象名来使用内部类。 局部内部类定义在外部类的方法体或者{}中该种内部类只能在其定义的位置使用一般使用的非常少此处简单了解下语法格式。 class Teacher{public void method(){class Frind{}}} 【注意事项】 1. 局部内部类只能在所定义的方法体内部使用 2. 不能被public、static等修饰符修饰 3. 编译器也有自己独立的字节码文件命名格式外部类名字$数字内部类名字.class 4. 几乎不会使用 匿名内部类都被称为匿名了那么肯定没有类的名字是通过实现接口来创建内部类这个在实际中运用的最多后续我们再说。 new Iswim(){Overridepublic void swim() {}
}; 这个就是匿名内部类{}里面的是接口Iswim的方法的重写{}里面才是被匿名的类的主体。