您的位置:首页 > 其它

内部类

2016-04-24 19:41 204 查看
内部类

1、 概念

在类的内部定义的类就是内部类,外部的类称为外部类。

2、 特点

是一个完整的、独立的类。

可以有属性、方法、构造、代码块。

编译之后会有独立的class文件,同样可以产生对象。

3、 class文件名

成员内部类 :外部类的类名 + $+内部类名。

局部内部类:外部类的类名 + $+1+内部类名。(1表示局部内部类的顺序)

4、 类型

4.1成员内部类

4.1.1 概念:作为类的成员,存在于某个类的内部。(用法与成员变量类似)

4.1.2 位置:位于外部类的全局位置。

4.1.3 语法:public class OutClass {

public class student{
public void c(){
}
}


4.1.4 访问修饰符:决定能否在第三方访问该内部类

4.1.4 特点:(1)在外部类的内部可以产生成员内部类的方法,可以访问外部类的所有的成员和方法,不受访问修饰符的限制。

(2) 不能定义static的属性和方法。

(3)可以访问外部类的任意属性和方法。

(4)使用this代表的是内部类对象。


(5)如果内部类属性与外部类属性同名:使用外部类类名.this.属性名调用外部类的属性;

如果内部类方法与外部类方法同名:使用外部类类名.this.方法名调用外部类的方法。

(6)可以在外部类里面直接产生内部类对象,然后无视访问修饰符视情况调用其属性和方法

(7)在第三方类中产生内部类对象,必须先产生外部类对象。
使用特殊外部类对象.new的语法产生内部类对象,
根据访问修饰符视情况调用属性和方法。


4.1.5 产生对象:可以在外部类的任意方法中,也可以在第三方类的方法中(考虑访问修饰符)

4.2 静态内部类

4.2.1 概念:作为类的静态成员,存在于某个类的内部。(是成员内部类的特例)

4.2.2 位置:位于外部类的全局位置,添加static 修饰符。

4.2.3 语法:

public static class student2{

public void c(){

}

}

4.2.4访问修饰符:决定能否在第三方访问该内部类。

4.2.5 特点:(1) 可以访问外部类中的静态成员和静态方法;

(2) 可以声明静态变量和成员变量,静态属性和成员属性;

(3)只能访问外部类的静态属性和静态方法;

(4)this代表内部类对象;


(5)如果属性方法出现同名的情况,用外部类类名.的方式访问外部类中的属性方法;

(6)只能访问外部类的静态属性和静态方法;

(7)用对象名.的方式访问内部类的非static属性和方法,无视访问修饰符;

(8)用内部类类名.的方式访问内部类的static属性和方法,无视访问修饰符;


(9)无需产生外部类对象,使用外部类类名.内部类类名的方式产生内部类对象;

(10)根据访问修饰符,调用属性和方法;

4.2.6产生对象:可以在外部类的任意方法中,也可以在第三方类的方法中(考虑访问修饰符)

4.3 局部内部类

4.3.1 概念:存在于某个方法内部的类。

4.3.2 位置:在外部类的某个方法内部。

4.3.3 语法:

public void study(){

class student3{

}
}


4.3.4特点:(1)如果外部方法是静态方法,那么就不能访问外部类中的成员变量和成员方法.

(2)没有访问修饰符。


(3)只能定义非static的属性和方法

(4)如果局部内部类所在的方法是静态的,则不能访问外部类的非静态属性和方法;其他情况都可以访问。

(5)this代表当前内部类对象。


(6)如果内部类属性与外部类属性同名:使用外部类类名.this.属性名调用外部类的属性。

(7)如果内部类方法与外部类方法同名:使用外部类类名.this.方法名调用外部类的方法。

(8)无法访问内部类所在方法的变量,只能访问常量。

(9)直接new出来即可,无视访问修饰符视情况调用其属性和方法。


4.4 匿名内部类

4.4.1 概念:存在于某个类的内部,但是无类名的类。

4.3.2 语法:

new 类或者接口的名字( ){

//匿名内部类的主体   }


4.3.3访问修饰符:不存在。

4.3.4 特点:(1)只能定义非static的属性和方法

(2)如果outMethod是静态的,则不能访问外部类的非静态属性和方法;其他情况都可以访问

(3)this代表当前的匿名内部类对象

(4) 如果内部类属性与外部类属性同名:使用外部类类名.this.属性名调用外部类的属性

(5)如果内部类方法与外部类方法同名:使用外部类类名.this.方法名调用外部类的方法

(6)无法访问内部类所在方法--即outMethod()中的的局部变量,只能访问常量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: