搬运:
1、重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。
2、简单、规范性:如果一个项目比较庞大,那么就需要一个能理清所有业务的架构师来定义一些主要的接口,这些接口不仅告诉开发人员你需要实现那些业务,而且也将命名规范限制住了(防止一些开发人员随便命名导致别的程序员无法看明白)。
3、维护、拓展性:比如你要做一个画板程序,其中里面有一个面板类,主要负责绘画功能,然后你就这样定义了这个类。
可是在不久将来,你突然发现这个类满足不了你了,然后你又要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地方可能有引用他,这样修改起来很麻烦。
如果你一开始定义一个接口,把绘制功能放在接口里,然后定义类时实现这个接口,然后你只要用这个接口去引用实现它的类就行了,以后要换的话只不过是引用另一个类而已,这样就达到维护、拓展的方便性。
4、安全、严密性:接口是实现软件松耦合的重要手段,它描叙了系统对外的所有服务,而不涉及任何具体的实现细节。这样就比较安全、严密一些(一般软件服务商考虑的比较多)。
接口只包含常量和抽象方法,不能使用new操作符创建接口的实例!!也无构造方法!!!
UML图里,接口名字和方法名字使用斜体!
虚线和空心三角形指向接口!
特性:接口中定义的所有方法都是public。当一个类实现接口时,该方法必须声明为公共的抽象实例方法!!!且所有变量必须是public static final!!
Show the error in the following code:
interface A {
void m1();
}
class B implements A {
void m1() {
System.out.println("m1");
}
}
public加在void m1()前面!!
Java为两个不同类对象可以互相比较,提供了以下方法:
public interface Comparable {
public int compareTo(E o);
}
由于所有Comparable对象都有compareTo方法,如果对象是Comparable接口类型的实例的话,JavaAPI中的java.util.Arrays.sort(Object[])方法就可以使用compareTo方法了对数组中的对象进行比较和排序了。
练习:
下面代码可以被编译么?
Integer n1 = new Integer(3);
Object n2 = new Integer(4);
System.out.println(n1.compareTo(n2));
答:不能,N1是一个Integer对象,其比较方法需要Interger参数,但N2被声明为Object。编译器将引发错误。
下面代码有什么错误?
public class Test {
public static void main(String[] args) {
Person[] persons = {new Person(3), new Person(4), new Person(1)};
java.util.Arrays.sort(persons);
}
}
class Person {
private int id;
Person(int id) {
this.id = id;
}
}
答:Person没实现Comparable接口,person数组不能用sort方法进行比较。
实现Comparable接口的好处是:
通过实现这个接口,类的对象可以直接传递给需要Comparable类型的方法。
Cloneable接口给出了一个可克隆的对象。
Cloneable接口定义如下:
public interface Cloneable{
}
这个接口是空的,一个带空体的接口称为标记接口。用来表示拥有特定的属性。实现Cloneable接口的类标记为可克隆的,而且它的对象可以使用在Object类中定义的clone()方法克隆。
实例:
Calendar calendar= new GregorianClaendar(2013,2,1);
Calendar calendar2=(Calendar)calendar.clone();
System.out.println("calendar==calendar2is"+(calendar==calendar2));
System.out.println("calendar.equals(calendar2)is"+calendar.equals(calendar2));
输出:
calendar == calendar1 is true;
calendar .equals (calendar2) is true;
因为
equals看内容不看引用!!!