/* 需求说明:学生类,新闻类,商品类虽然是完全不同的类,但是都具有比较的能力,比如可以比较两个学生的大小,但需要指定比较的依据是学号、姓名还是成绩等。 实现思路及关键代码: 将比较的能力定义为接口,让学生、新闻、商品类都实现该接口。 1)定义接口Comparable,其中包含唯一的方法int compareTo(Object obj);返回值>0,表示大于,返回值=0,表示等于,返回值<0,表示小于。 2)定义学生类,包括学号、姓名、年龄和分数,实现Comparable接口,实现比较; 3)定义新闻类,包括编号(int类型)、标题、内容和点击数,实现Comparable接口,实现比较; 4)定义测试类,分别创建两个学生对象、新闻对象,进行比较并输出结果。 */
1、分析题意,找到需要定义的内容和个数
根据题意,我们可以看出,需要定义一个接口(Comparable),三个类(Student、News、Goods),接口包括唯一的方法int compareTo(Object obj);通过方法判断返回值的类型,如果返回值>0,表示大于,返回值=0,表示等于,返回值<0,表示小于。
2、创建一个名为Comparable的接口,实现int compareTo(Object obj)的方法;
代码如下:
注意:Object 是 Java 类库中的一个特殊类,也是所有类的父类。 也就是说,Java 允许把任何类型的对象赋给 Object 类型的变量。 当一个类被定义后,如果没有指定继承的父类,那么默认父类就是 Object 类。
3、创建一个名为名为News的类使用Comparable的接口
因为在int compareTo(Object obj);方法中,返回值是int类型,所以我们可以直接用两个新闻的点击数的差来判断,大于0时,返回大于,小于0时返回小于,等于0时返回等于。
return this.click-news.click;
注意:在 Java 中强制类型转换分为基本数据类型和引用数据类型两种,引用数据类型的强制类型转换。 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换,因此我们需要使用强制转换将obj类型转换为我们需要的news类型。
4、接下来我们来编写测试类
新建两个对象news和news1,调用compareto的方法进行比较,通过方法的返回值来判断输出。
5、最后编译运行
其他两个类也是同样的过程,因此省略了。
6、总结
接口的特点:
用 interface 来定义。
接口中的所有成员变量都默认是由public static final修饰的。
接口中的所有方法都默认是由public abstract修饰的。
接口没有构造方法。构造方法用于创建对象
实现接口的类中必须提供接口中所有方法的具体实现内容。
多个无关的类可以实现同一个接口
一个类可以实现多个无关的接口
与继承关系类似,接口与实现类之间存在多态性
接口也可以继承另一个接口,使用extends关键字。
实现接口的类中必须提供接口中所有方法的具体实现内容。
多个无关的类可以实现同一个接口
一个类可以实现多个无关的接口
与继承关系类似,接口与实现类之间存在多态性