(一)枚举 enum(相当于一个类):
枚举常用的方法:
枚举特性:
类型安全,紧凑有效的数据定义,可以和程序其他部分完美交互,运行效率高
(二)泛型:
语法:
类名<泛型名称>
常规用法:
1)定义泛型类时声明多个类型
2)定义泛型类时声明数组类型
public class ArrayClass <T>{
private T[] array;
public T[] getArray() {
return array;
}
public void setArray(T[] array) {
this.array = array;
}
public static void main(String[] args) {
ArrayClass<String> demo =new ArrayClass<String>();
String value[] ={"成员1","成员2","成员3"};
demo.setArray(value);
String array[]=demo.array;
for (String i:array){
System.out.println(i);
}
}
}
3)集合类声明容器的元素:
4)限制泛型可用类型:
语法: class 类名名称<T extends anyClass> ,注:anyClass:另一个类
注:泛型类型不但可以向下造型还可以向上造型,使用super关键字
5)使用类型通配符
语法: 泛型名称<? extends List> a=null;
6)继承泛型与实现泛型接口
练习题
1):彩虹枚举 编写一个彩虹枚举,枚举中有“红橙黄绿蓝靛紫”7种颜色。
public enum Rainbow {
red, orange, yellow, green, blue, indigo, purple
}
2): 设计一个厕所类,提供一个入口方法,要求男生只能进男厕所,女生只能进女厕所。
class Toilet <T>{
public void enter(T t){
}
}
class Male{
}
class Female{
}
public class Demo {
public static void main(String[] args) {
Toilet<Male> mansroom=new Toilet();
Toilet<Female> womansroom=new Toilet();
}
}
3):通道提示 创建一个通道类,类中有一个入口方法,如果顾客进入通道则提示“顾客您好,小心地滑”。如果员工进入通道则没有任何提示内容。请创建两个通道对象,一个是公共通道,一个员工通道。顾客不能进入员工通道。
class Entrance<T> {
public void enter(T t) {
if(t instanceof Customer) {
System.out.println("顾客您好,小心地滑");
}
}
}
class Customer {
}
class Staff {
}
public class Demo {
public static void main(String[] args) {
Staff tom=new Staff();
Customer mali=new Customer();
Entrance<Staff> staffEntrance = new Entrance();
staffEntrance.enter(tom);
Entrance publicEntrance = new Entrance();
publicEntrance.enter(tom);
publicEntrance.enter(mali);
}
}
4):权限设置 模拟明日学院的权限设置模块,0表示游客,1表示注册用户,2表示VIP会员,3表示管理员,控制台输入0~3中的任意数字后,输出每种权限的“特权”。游客:观看部分视频、浏览所有课程、注册、登录;注册用户:免费观看所有视频、部分配套习题、收藏课程、实时提问、个人设置;VIP会员:免费观看所有视频、浏览所有习题及答案、源码下载、定期在线互动交流;管理员:后台所有管理模块、前台所有功能模块。
import java.util.Scanner;
public class PermitEnum { // 创建一个PermitEnum(权限)类
enum POP {
TOURIST, USER, VIP, MANAGER; // 把常量放置在枚举类型Identity(身份)中
public static POP getPop(int id) {// 定义一个静态方法,用来根据输入获取对应POP枚举值
switch (id) {
case 0:
return POP.TOURIST;
case 1:
return POP.USER;
case 2:
return POP.VIP;
case 3:
return POP.MANAGER;
default:
return POP.TOURIST;
}
}
}
public static void main(String[] args) {
System.out.print("Welcome to 明日学院!\n\n请输入您的身份\n(0表示游客,1表示注册用户,2表示VIP会员,3表示管理员):"); // 提示信息
Scanner sc = new Scanner(System.in); // 控制台输入
POP pop = POP.getPop((int) sc.nextInt());// 根据输入获取枚举值
switch (pop) { // 多分支语句
case TOURIST: // 登录人的身份是“游客”时,输出“游客”的权限
System.out.println("您现在是“游客”,可享有的权限如下:\n观看部分视频、浏览所有课程、注册、登录!");
break;
case USER: // 登录人的身份是“注册用户”时,输出“注册用户”的权限
System.out.println("您已成为注册用户,可享有的权限如下:\n免费观看所有视频、部分配套习题、收藏课程、实时提问、个人设置!");
break;
case VIP: // 登录人的身份是“VIP会员”时,输出“VIP会员”的权限
System.out.println("您已成为VIP会员,可享有的权限如下:\n免费观看所有视频、所有习题及答案、源码下载、定期在线互动交流!");
break;
case MANAGER: // 登录人的身份是“管理员”时,输出“管理员”的权限
System.out.println("您是大BOSS,拥有本站所有权限:\n后台所有管理模块、前台所有功能模块!");
break;
}
sc.close(); // 关闭控制台输入
}
}
5):体检记录 按照以下步骤完成体检记录模拟:
(1)创建一个性别枚举,有男性和女性两个枚举项。
(2)创建一个测试类,类有A、B、C 3个泛型。分别使用这3个泛型创建3个成员变量。编写可以为3个成员变量赋值的构造方法。
(3)创建第一个测试类对象date,该对象用于记录日期,3个成员变量分别记录表示年、月和日的整型数字,在控制台打印date对象的所有属性值。
(4)创建第二个测试类对象tom,该对象用于记录人物信息,3个成员变量分别记录姓名、身高和性别。姓名是字符串,身高是整数,性别使用(1)中提供的枚举。在控制台打印tom对象的所有属性值。
enum Sex {
male, female
}
public class Demo<A, B, C> {
A a;
B b;
C c;
public Demo(A a, B b, C c) {
this.a = a;
this.b = b;
this.c = c;
}
@Override
public String toString() {
return "Demo [a=" + a + ", b=" + b + ", c=" + c + "]";
}
public static void main(String[] args) {
Demo<Integer, Integer, Integer> date = new Demo<>(2008, 8, 8);
System.out.println(date);
Demo<String, Integer, Sex> tom = new Demo<String, Integer, Sex>("杰克", 175, Sex.male);
System.out.println(tom);
}
}