类中的5种成员:
-Field
-方法
-构造器
-初始化块
-内部类 / 接口 / 枚举
可以把接口理解成一个“完全抽象、彻底抽象”的特殊类。
枚举是一种实例数固定的类。
内部类 —— 就是把一个类放在类里面定义。
内部类 - 寄生类。
外部类 - 宿主类。
内部类, 由于它的上一级程序单元是类。
因此它完全可以使用private|protected|默认|public这4个访问控制符。
由于内部的上一级程序单元是类。可以用static修饰。
有static修饰的内部类,属于外部类本身。
没有static修饰的内部类,属于外部类的实例。
内部类的生成的class文件名字为: 外部类$内部类.class
==========非静态内部类==========
内部类一个好处:它可以直接访问外部类的private成员(field/方法/构造器)。
内部类可以直接访问外部类的成员,包括private成员!、
反过来,外部类不可以访问内部类的成员。
内部类,还有名称叫“寄生类”。
如果是没有static修饰的内部类的实例,必须寄生在“外部类”的对象里。
如果是static修饰的内部类的实例,寄生在“外部类”的类本身里。
非静态内部类,也是属于非静态成员,
——因为不能被外部类的静态成员所访问。
==========静态内部类==========
静态内部类要用static修饰。
static修饰的内部类的实例,寄生在“外部类”的类本身里。
静态内部类,也是属于静态成员,因此它不能访问外部类的非静态成员(Field、方法)
使用内部类
(1)定义变量。 (2) 创建实例。 (3)访问它的类Field/类方法
A。 如果在外部类的里面,使用内部类。
并没有太多需要注意的地方。
B。 在外部类的外面,使用内部类。
B1 非静态内部类
● 声明变量:
外部类.内部类 变量名
● 创建非静态内部类的实例。
在此之前,必须先创建外部类的实例 —— 必须先创建宿主。
接下来,用 宿主.new 内部类构造器();
● 非静态内部类派生子类。
由于子类的构造器,必须调用父类构造器一次。
因此必须在子类构造器中使用宿主对象去调用非静态内部类的构造器。
B2 静态内部类
静态内部类它是寄生外部类的类本身里的,所以一般不需要程序员去理会宿主。
你可以把外部类当成静态内部类的包就行了。
局部内部类
(了解一下)
用的不是很多!
局部内部类,是一个局部成员,和局部变量相似。因此不能用 static、访问控制符修饰。
局部内部类用final可以的,表明这个局部内部类不能被继承。
局部内部类的作用域实在太有限——出了方法就不能使用了。
由于局部内部类只能在当前方法中使用,因此使用起来比较简单。
局部内部类的class文件名为 外部类$N内部类.class
——为什么要有N?因为一个外部类,不同方法中可以定义多个同名局部内部类。
匿名内部类
它是一个“没有名字”的内部类。
所以程序以后无法再访问这个“匿名内部类”。
当程序创建匿名内部类是,会立即创建匿名内部类的实例。
匿名内部类的语法:
new 接口() | 父类构造器(参数)
{
// 类体部分
}
—— 上面语法格式实际上返回匿名内部类的实例。
程序以后只能使用匿名内部类的实例。
匿名内部类的规则:
A。 匿名内部类必须显式继承一个父类,或实现【一个】接口。
B。 匿名内部类必须实现接口或抽象类中所有抽象方法。
——因为匿名内部类需要立即创建实例,因此它不能是抽象的。
C。 匿名内部类不能有构造器。
——因为匿名内部类没有类名,构造器名无法确定。
枚举(JDK 1.5才有)
用于代表【实例已经固定】的类,而且定义时就必须在【第一行】创建、并列出来。
修饰符 enum 枚举名
{
// 立即在第一行列出该枚举的所有实例。
}
- 修饰符 可以是 public | 省略 、 abstract | final(总有其中一个)。
所有的枚举都有一个values()方法,该方法返回所有的枚举实例。
● 有了枚举以后,它的实例已经创建出来。
----- 直接使用即可。
● 枚举类可以有Field 、方法、构造器(只能是private修饰)、初始化块、内部类
列出枚举值,并不是简单地定义几个枚举值的变量名。
而是调用枚举类的构造器来创建相应的实例。
定义枚举的方法时要非常小心!
● 包含抽象方法的枚举类
● 枚举可以实现接口。
A。 实现接口,并直接实现所有的抽象方法。
此时枚举类就不再使用抽象枚举。
B. 实现接口,但并不直接实现抽象方法。
此时枚举类就只能是抽象枚举。
—— 就与上一个知识点相同了。
抽象类只要定义5个。
接口3个。
非静态内部类要5个,而且都要外部类以外的地方创建实例,每个都派生一个子类。
匿名内部类, 写上8个。 继续去弄继承,多态,方法重载 重写去~~
-Field
-方法
-构造器
-初始化块
-内部类 / 接口 / 枚举
可以把接口理解成一个“完全抽象、彻底抽象”的特殊类。
枚举是一种实例数固定的类。
内部类 —— 就是把一个类放在类里面定义。
内部类 - 寄生类。
外部类 - 宿主类。
内部类, 由于它的上一级程序单元是类。
因此它完全可以使用private|protected|默认|public这4个访问控制符。
由于内部的上一级程序单元是类。可以用static修饰。
有static修饰的内部类,属于外部类本身。
没有static修饰的内部类,属于外部类的实例。
内部类的生成的class文件名字为: 外部类$内部类.class
==========非静态内部类==========
内部类一个好处:它可以直接访问外部类的private成员(field/方法/构造器)。
内部类可以直接访问外部类的成员,包括private成员!、
反过来,外部类不可以访问内部类的成员。
内部类,还有名称叫“寄生类”。
如果是没有static修饰的内部类的实例,必须寄生在“外部类”的对象里。
如果是static修饰的内部类的实例,寄生在“外部类”的类本身里。
非静态内部类,也是属于非静态成员,
——因为不能被外部类的静态成员所访问。
==========静态内部类==========
静态内部类要用static修饰。
static修饰的内部类的实例,寄生在“外部类”的类本身里。
静态内部类,也是属于静态成员,因此它不能访问外部类的非静态成员(Field、方法)
使用内部类
(1)定义变量。 (2) 创建实例。 (3)访问它的类Field/类方法
A。 如果在外部类的里面,使用内部类。
并没有太多需要注意的地方。
B。 在外部类的外面,使用内部类。
B1 非静态内部类
● 声明变量:
外部类.内部类 变量名
● 创建非静态内部类的实例。
在此之前,必须先创建外部类的实例 —— 必须先创建宿主。
接下来,用 宿主.new 内部类构造器();
● 非静态内部类派生子类。
由于子类的构造器,必须调用父类构造器一次。
因此必须在子类构造器中使用宿主对象去调用非静态内部类的构造器。
B2 静态内部类
静态内部类它是寄生外部类的类本身里的,所以一般不需要程序员去理会宿主。
你可以把外部类当成静态内部类的包就行了。
局部内部类
(了解一下)
用的不是很多!
局部内部类,是一个局部成员,和局部变量相似。因此不能用 static、访问控制符修饰。
局部内部类用final可以的,表明这个局部内部类不能被继承。
局部内部类的作用域实在太有限——出了方法就不能使用了。
由于局部内部类只能在当前方法中使用,因此使用起来比较简单。
局部内部类的class文件名为 外部类$N内部类.class
——为什么要有N?因为一个外部类,不同方法中可以定义多个同名局部内部类。
匿名内部类
它是一个“没有名字”的内部类。
所以程序以后无法再访问这个“匿名内部类”。
当程序创建匿名内部类是,会立即创建匿名内部类的实例。
匿名内部类的语法:
new 接口() | 父类构造器(参数)
{
// 类体部分
}
—— 上面语法格式实际上返回匿名内部类的实例。
程序以后只能使用匿名内部类的实例。
匿名内部类的规则:
A。 匿名内部类必须显式继承一个父类,或实现【一个】接口。
B。 匿名内部类必须实现接口或抽象类中所有抽象方法。
——因为匿名内部类需要立即创建实例,因此它不能是抽象的。
C。 匿名内部类不能有构造器。
——因为匿名内部类没有类名,构造器名无法确定。
枚举(JDK 1.5才有)
用于代表【实例已经固定】的类,而且定义时就必须在【第一行】创建、并列出来。
修饰符 enum 枚举名
{
// 立即在第一行列出该枚举的所有实例。
}
- 修饰符 可以是 public | 省略 、 abstract | final(总有其中一个)。
所有的枚举都有一个values()方法,该方法返回所有的枚举实例。
● 有了枚举以后,它的实例已经创建出来。
----- 直接使用即可。
● 枚举类可以有Field 、方法、构造器(只能是private修饰)、初始化块、内部类
列出枚举值,并不是简单地定义几个枚举值的变量名。
而是调用枚举类的构造器来创建相应的实例。
定义枚举的方法时要非常小心!
● 包含抽象方法的枚举类
● 枚举可以实现接口。
A。 实现接口,并直接实现所有的抽象方法。
此时枚举类就不再使用抽象枚举。
B. 实现接口,但并不直接实现抽象方法。
此时枚举类就只能是抽象枚举。
—— 就与上一个知识点相同了。
抽象类只要定义5个。
接口3个。
非静态内部类要5个,而且都要外部类以外的地方创建实例,每个都派生一个子类。
匿名内部类, 写上8个。 继续去弄继承,多态,方法重载 重写去~~