------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
内部类 | 含义 | 定义在类中的类 |
访问 | 内部类访问外部类,可以任意访问; 外部类访问内部内,需建立内部类对象 | |
其他类访问内部类 | 方式一,直接以:外部类类名.内部类类名 对象名称=new 外部类类名().new 内部类类名();的形式建立内部内的对象。 方式二:在外部类中建立内部类对象,在其他类中建立外部类对象,以:外部类对象名称.内部类对象名称.内部类变量或方法;的形式访问 | |
同名变量x | 当外部类成员变量,内部类成员变量,内部类局部变量同名时,在调取该局部功能时,默认该变量x指的是内部类局部变量,若要调取内部类成员变量,应使用this.x 若要调取外部类成员变量,应使用外部类类名.this.x来调取 | |
特点 | 内部类作为外部类的成员之一,可以被private、static等修饰 | |
静态内部类 | 当内部类中定义了静态成员,该内部类也必须是静态的 | |
当内部类被定义为静态时,只能访问外部类中的静态成员 | ||
当外部类中的静态方法访问内部类时,即使建立对象,该内部类也应该是静态的 | ||
外部其他类访问静态内部类的非静态成员:建立对象访问,但是因为内部类是静态的,外部类一创建,内部类就存在了,因此不需要创建外部类对象,可以使用外部类类名调用内部类:外部类类名.内部类类名。那么调用格式为:new 外部类类名.内部类类名().静态内部类的非静态成员; | ||
外部其他类访问静态内部类的静态成员:由于全部是静态,因此可以被类名直接调用,格式如下:外部类类名.内部类类名.内部类静态成员 | ||
与普通内部类区别 | 静态内部类具备静态特性,只会被加载一次,可略微提高效率 | |
定义原则 | 当描述事物时,事物的内部还有事物,该事物用内部类描述,因为内部事物在使用外部事物的内容 | |
定义在局部(函数)中的内部类 | 1、不可以被成员修饰符修饰,在调用方法时,内部类只有被创建了对象了,内部类中的方法才会跟着被调用的方法执行。且创建对象的代码应该放在内部类的后面,否则会报错 2、不能访问局部变量,只能访问被final修饰的局部变量(是个bug,JDK1.8已取消) 3、局部内部类不能在方法以外的地方被访问 | |
匿名内部类 | 内部类的简写方式,必须是继承类或实现接口时,才能定义匿名内部类 格式:new 父类名称(){} 调用格式:new 父类名称(){}.方法 | |
匿名内部类实际上是其所继承或实现的类的子类的实例对象,包含子类的特有方法体和父类复写体或实现体,若非要命名的话,可以以父类名称进行引用。但是命名后不能调用子类特有方法,因为是父类引用 | ||
任何类中都可以创建匿名内部类,即使其没有具体的继承或实现父类,此时匿名内部类实际上是Object类的子类,因此格式为:new Object(){} | ||
匿名内部类中定义的方法(包括复写或实现)最好就一两个 | ||
包 | 作用 | 便于类的管理,有按功能划分和模块划分 |
格式 | package 包名,必须是第一条可执行语句,只能有一句 |