面试时必问题:接口和抽象类 有什么区别??

来源:互联网 发布:类似snapchat的软件 编辑:程序博客网 时间:2024/06/05 10:33

发现面试的时候最常问的就是接口和抽象类有什么区别??


对于接口和抽象类中有些方法是需要覆盖的

第一个方面:定义方面

定义一个接口中的方法时,其访问控制修饰符只能是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
                                             
0 0
原创粉丝点击