发现面试的时候最常问的就是接口和抽象类有什么区别??
对于接口和抽象类中有些方法是需要覆盖的
第一个方面:定义方面
定义一个接口中的方法时,其访问控制修饰符只能是public或者是没有,如果没有修饰符也是默认的是public。如果用其它访问控制修饰符会有错误
public interface IManager{
String E = "DD";
void getS();
void getN();
// private void getN();//error 方法默认是public,不能使用其他访问控制修饰符
}
在定义接口方法时不需要方法体。 但是在抽象类中,只有抽象方法不需要方法体,非抽象方法必须要有方法体。
public abstract class MAbs{
public static final String E = "DD";
public abstract void getT();
public void getW{
}
void getW(){
}
}
第二个方面:用法方面 抽象类也属于类,所以类就只能被单继承,继承类使用extends关键字。 而接口却可以多实现,利用implements关键字,各接口之间用逗号隔开
public class R extends MAbs implements IManager,IRead{
}
在extends抽象类后需要覆写抽象类中的所有抽象方法,需要覆写implements接口中的所有方法
public class R extends MAbs implements IManager,IRead{
@Override
public void getS() {
}
@Override
public void getN() {
}
@Override
public void getT() {
}
}
1,接口 中定义的方法访问权限默认为public,所以实现该接口的方法时访问控制修饰符必须为public,不能省略。 子类覆写父类方法时访问权限必须要 大于父类。 2,可以通过匿名内部类的方式使用接口,但抽象类不行
IManager m = new IManager() {
@Override
public void getS() {
}
@Override
public void getN() {
}
};
//MAbs s = new MAbs()//error