20220402java学习笔记 ------枚举与泛化

(一)枚举 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);
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Royalreairman

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值