抽象类与抽象接口之抽象接口

前文中,介绍了抽象类的一些基本知识,在这篇短文中,简单地介绍和实现一个接口。

Core Java里关于抽象接口有段很有概括性,总结性的话:an interface is not a class but a set of requirements for classes that want to conform to the interface. 即:接口不是类,接口是需求的一个集合,而这些需求又是一些具有相同要求的类提出的。所以从某种意义上讲,接口和抽象类还是有共同点的。我借用Core Java中提到Java.lang.Comparable<T>接口。在《Java中的排序(一)》中我使用了这个类,但是在JDK1.5中该接口被扩展为泛型化的接口。所以这里先看下该接口的源码:

public interface Comparable<T> { public int compareTo(T o); }

可以看出,interface以及它的方法是被public修饰的。没错,如果你将它们的修饰符改成protected或者private,那么就会有编译错误。实际上,如果一个接口被protected或者private修饰,那还怎么被别的类实现呢?当然你可以不加任何修饰符在interface和它的方法之前。前者意味着默认的访问权限,但是如果你不加任何修饰符在方法之前,那么会被自动提升为public,很正常,不然怎么让实现该接口的类去实现这个方法呢?接口中的变量和方法类似,只不过是默认为public static final。

好了,下面改一下在《Java中的排序(一)》出现的代码,实现泛型的Comparable接口:

import java.util.*; interface Test{ int test(); } class Mark implements Comparable<Mark>{ private String name; private String course; private double mark; public Mark(String name, String course, double mark){ this.name = name; this.course = course; this.mark = mark; } public int compareTo(Mark o){ Mark m = o; return (int)(this.mark - m.mark); } public String toString(){ return "( "+ name +"-"+ course +"-"+ String.valueOf(mark) +" )"; } } public class TestCollectionsSort { public static void main(String args[]){ List<Mark> list = new ArrayList<Mark> (); Comparable<Mark> c = new Mark("S1", "Maths", 68.5); Mark mark1 = new Mark("S1", "Maths", 68.5); Mark mark2 = new Mark("S1", "Maths", 78.5); Mark mark3 = new Mark("S1", "Maths", 62.5); Mark mark4 = new Mark("S1", "Maths", 98.5); Mark mark5 = new Mark("S1", "Maths", 82.5); list.add(mark1); list.add(mark2); list.add(mark3); list.add(mark4); list.add(mark5); System.out.println(list); Collections.sort(list); System.out.println(list); } }

好了,抽象类和接口的基本知识,就介绍到这里,下一篇blog将侧重于两者的区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值