抽象类:
1、抽象类使用abstract修饰
2、抽象类只能单继承
3、含有抽象方法的类是抽象类,必须使用abstract关键字修饰
4、抽象类可以含有抽象方法,也可以不包含抽象方法,抽象类中可以有具体的方法
接口:
1、接口使用interface修饰
2、一个类可以实现多个接口
3、接口中的方法均为抽象方法(特殊的抽象类)
4、所有的属性肯定是 public、static和final,所有的方法都是abstract,所以可以默认不写上述标识符
共同点:
1、不能被实例化,即不能使用new关键字来实例化对象
注意:抽象类是对一组具有相同属性和方法的逻辑上有关系的事物的一种抽象,而接口则是对一组具有相同属性和方法的逻辑上不相关的事物的一种抽象
接口项目中的用法:
接口是设计阶段声明,后来开发时可以直接使用。是对相同属性和方法提前进行声明,使用的时候可以直接实现这个方法。避免同一个功能写的千奇百怪。
比如:public int compareTo(T o);方法,已经定义了参数、方法名、返回值,一切比较相关的方法都会实现这个接口(Comparable<T>),重写compareTo这个方法。可以看下String和Integer...的compareTo方法就理解了这个意思了。
String 源码的compareTo方法如下(实现了Comparable<T>接口): public int compareTo(String anotherString) { int len1 = value.length; int len2 = anotherString.value.length; int lim = Math.min(len1, len2); char v1[] = value; char v2[] = anotherString.value; int k = 0; while (k < lim) { char c1 = v1[k]; char c2 = v2[k]; if (c1 != c2) { return c1 - c2; } k++; } return len1 - len2; }Integer 源码的compareTo方法如下(实现了Comparable<T>接口): public int compareTo(Integer anotherInteger) { return compare(this.value, anotherInteger.value); }
抽象类项目中的用法:
一般用于项目的重构,到项目后期几个相似的类有共同的实现方法,有些方法有不同的实现,就用到了抽象类。相同的方法在抽象类写成普通方法,对一个实物抽象时(有不同的实现方法)就定义成抽象方法。