class Boy{ //男演员实体类
//姓名
public String mName;
//身高
public int mHeight;
public Boy(String name, int height) {
this.mName = name;
this.mHeight = height;
}
public Boy(){
}
}
//演员选拔类
class Compare{ //即使不继承boy类,还是可以用变量mHeight
public Boy WhoIsBetter(Boy boy1, Boy boy2){
if (boy1.mHeight > boy2.mHeight){
return boy1;
}
else{
return boy2;
}
}
}
//测试
public class test{
public static void main (String args[]){
Boy boy1 = new Boy("潘长江", 165);
Boy boy2 = new Boy("刘德华", 175);
Compare a= new Compare() ;
System.out.println(a.WhoIsBetter(boy1, boy2).mName);
}
}输出刘德华
/*结果选出了身高更高的刘德华,选出了体重更轻的周迅,导演很满意。但从程序设计角度,
* 这段代码显然不够完美,第一天选男主角,第二天选女主角,往后还要选男配角,
* 选女配角,选群众......按目前方式,只有往Compare类里不断添加方法才能
* 满足导演需求,方法会越来越多,代码会越来越长。
* 于是,我决定修改WhoIsBetter方法,让它以后可以支持男主,女主,男配,女配,
* 男群众,女群众甚至支持所有两个对象 */
package src;
class Boy{ //男演员实体类
//姓名
public String mName;
//身高
public int mHeight;
public Boy(String name, int height) {
this.mName = name;
this.mHeight = height;
}
public Boy(){
}
}
class Girl{
//姓名
public String wName;
//体重
public int wWeight;
public Girl(String name, int weight){
this.wName = name;
this.wWeight = weight;
}
}
class Compare<Type> {
public<Type extends Comparable> Type WhoIsBetter(Type t1, Type t2){//就像C++中那样传入什么类型,就是什么类型
if (t1.compareTo(t2)>0){
return t1;
}
else{
return t2;
}
}
}
/*
* 因为,在编译之前,也就是我们还在定义这个泛型方法的时候,我们并不知道这个泛型类型T,
* 到底是什么类型,所以,只能默认T为原始类型Object。所以它只能调用来自于Object的
* 那几个方法,而不能调用compareTo方法。
*可我的本意就是要比较t1和t2,怎么办呢?这个时候,就要使用类型限定,对类型变量T设置限定(bound)
*来做到这一点。
public T compare(T t1,T t2) { //添加类型限定
if(t1.compareTo(t2)>=0);
return t1;
}
*/
public class test1{
public static void main (String args[]){
Boy boy1 = new Boy("潘长江", 165);
Boy boy2 = new Boy("刘德华", 175);
Compare<Boy> a= new Compare<Boy>() ;
System.out.println(a.WhoIsBetter(boy1.mHeight, boy2.mHeight));
Girl girl1 = new Girl("巩俐", 120);
Girl girl2 = new Girl("周迅", 80);
Compare<Girl> b= new Compare<Girl>() ;
System.out.println(b.WhoIsBetter(girl1.wWeight , girl2.wWeight));
}
}
//175
//120