package it.cast.java.util;
/*
通过相亲节目来找美女。
需要定义那些类
1.Person ,应该有那些属性?性别用枚举类来表示
2.既然是找美女,那么美以应该是一种标准,,有了这个标准是否要去具体定义什么叫做美?
3。怎么去找美女?通过什么来实现?
美的标准
是不是有瓜子脸:isOvalFace
是不是有好身材:hasFigureWell
思路:
既然是相亲找美女,那么可定要有人, 所有的人都可以定义到Person里面。包括美女
和来相亲的男士。Person 类应该是具有哪些属性?姓名,年龄(20-27之间),性别
根据题目,性别要用枚举类型来表示, 在这里我们尅吧性别类放在Person类里面, 但是
这样的话就是内部类,访问的话相对复杂,我们不在这里设置认为的麻烦,所以就把他
重新定义为一个类。现在有了Person类和Gender枚举类
既然是找美女, 那么IBbeautiful 是一种标准。那么我们就要设置一个借口,代表标准或者规范
,所以就有了一个类,IBeautiful 类。
我们有了接口(规范类),那么必定有另一个类实现它的方法 。就是题目上所说的AestheticalStandard
实现, 所以又有了一个AestheticalStandard类。
此处复写的方法为判断两个标准:
是否是瓜子脸:isOvalFace
有没有好身材:hasFigureWell
用boolean类型
我们有五个类,main Person , Gender ,IBeautiful, AestcheticalStandard
Person 类里面的属性:姓名, 年龄, 性别。 因为性别有单独的Enum类, 所以我们就可以直接调用
利用构造方法, 在构造对象的时候就进行赋值。
此外, Person 类哈有类方法search(); 雷勇她实现找对象的功能。对于search,
里面传递的参数,可定还有人,还有AestheticalStandard类,美不美
在这里要注意几点:
1.就是构建对象的时候直接赋的值不能为空, 否则会出现空引用的情况, 所以在开始的的时候要进行
判断:
2.判断性别;
3。判断年龄
4, 判断相貌
对于Gender类, 直接赋值后可以再直接赋值。
那个aestheticalstandard ,boolean类型默认其为true.
*/
class Person{
private String name;
private Gender sex;
//枚举类型的特点,?
private Integer age;
//人类需要姓名,性别 ,年龄这三个属性,她是相亲的美女具有的
//构造必须的
public Person(String name, Gender sex, Integer age){
super();
this.name=name;
this.sex=sex;
this.age=age;
}
//创建类的方法
String search(Person g,AestheticalStandard d)
{
//如果对象不存在,或者性别没有,处理
if(g==null||d=null){
return "对不起,条件不满足";
}
String ret=g.getName()+",";
//获取待相亲的名字,并和, 字符串相连。
//根据获取性别的值,case 不同的动作,方法调用的:对象.方法名()
switch (g.getSex()){
case MAN:
ret+="对不起,我不喜欢男的";
break;
case NONE:
ret+="能不能透漏个性别";
break;
//如果两者都不是,执行默认(此时肯定是女性),
default:
if(g.age<27&&g.age>20){
if(d.isOvalFace()&&d.hasFigureWell()){
ret+="我等你等的花都谢了,嫁给我吧";
}
else{
ret+="对不起,今天没时间";
//脸蛋不好的或者身材不好的,虽然年龄合适但是还没时间。
}
}
else{
ret+="不好意思,年 龄不合适";
}
return ret;
}
//继续创建类的方法,毕竟还是在类中,person 有很多方法呢
//那三个name sex 和age 三个私有对象需要共有方法的访问
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public String getSex()
{
return sex;
}
public void setSex(){
this.sex=sex;
}
public Integer getAge()
{
return age;
}
//int 是基本数据类型,Integer是其包装类,注意是一个类。
public void setAge(Integer age){
this.age=age;
}
}
//这里是Person类以外了吧
/*
下面是枚举类型,enum 枚举名{ 枚举值表 };
在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。
例如:
该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被说明为weekday
类型变量的取值只能是七天中的某一天。
*/
enum Gender{
MAN("男"),WOMAN("女"),NONE("保密");
//定义了一个私有变量,也在枚举类中
private String value;
//性别方法也在枚举类中么?走眼,这是枚举类的实例化。构造器
private Gender(String value){
this.value=value;
}
//看看枚举类里还有什么
public String toString(){
return value;
}
}
//定义漂亮的接口
interface Ibeautiful{
//是否有瓜子脸
boolean isOvalFace();
//身材是不是很好
boolean hasFigureWell();
}
class AestheticalStandard implements Ibeautiful{
public boolean isOvalFace(){
return true;
}
//在这???类中,对瓜子脸和好身材这两个接口进行复写
public boolean hasFigureWell(){
return true;
}
}
//在这复写接口方法的神奇类结束后,正式相亲
class XiangQin{
public static void main(String[] args){
//创建两个对象
Person p=new Person("武大郎",Gender.MAN,21);
Person g=new Person("sex lady",Gender.WOMAN,25);
//枚举类就是这样用的么,其中的变量写成刚才的格式,类名.某量
//就把某量后面的()中的字符串提取出来啦
String k=p.search(g, new AestheticalStandard());
System.out.println(k);
}
}
}
|