接口的优点和缺点
优点:解耦,增加代码的可扩展性。
缺点:子类实现接口,如果接口需要新增新方法,那么所有子类将不能编译通过,而需要重写新增的方法。
接口的访问权限
接口中的方法:只能是public abstract,如果不写public也是public的,不是default的。
接口中的属性:修饰只能是public static final的,哪怕不写权限也是pubic的。需要初始化。
比如:
public interface Test {
void test(); //这里没有写public和abstract,是省略了。
int x = 1; //这里没有写public static final,是省略了。
}
抽象类
1.用abstract修饰的类叫做抽象类,用abstract修饰的方法叫做抽象方法(就是用来重写的)。
2.抽象类中存在抽象方法和非抽象方法,所以抽象方法的abstract修饰符不可以省略。
3.如果某个类包含抽象方法,那么就必须要定义为抽象类。
4.抽象类就是用来继承的,它不可以被new出来。如果继承了抽象类,那么必须重写抽象类的抽象方法。
5.抽象类中的非抽象方法以及属性的权限和普通类中的权限完全一致,但是对于抽象方法就不一样。抽象方法不允许private,static,synchronized,native修饰。
原因:
a.抽象方法本来就是需要重写的,如果是private权限,则抽象方法没有意义。
b.抽象方法没有具体的实现,如果是static的也就没有意义。
c.抽象的方法如果加上synchronized,那么就只能是对象锁(因为不能用static修饰)。然而抽象类不可以实例化,所以锁只能作用于子类,在这里没有用处。
d.native和abstract分别表示让本地操作系统实现和让子类实现,如果同时出现,那么无法说清楚到底让谁来实现。