前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >面试时必问题:接口和抽象类 有什么区别??

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

作者头像
fanfan
发布2022-05-06 19:51:56
发布2022-05-06 19:51:56
21900
代码可运行
举报
文章被收录于专栏:编程思想之路编程思想之路
运行总次数:0
代码可运行

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

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

第一个方面:定义方面

定义一个接口中的方法时,其访问控制修饰符只能是public或者是没有,如果没有修饰符也是默认的是public。如果用其它访问控制修饰符会有错误

代码语言:javascript
代码运行次数:0
运行
复制
public interface IManager{
        String E = "DD";

        void getS();
       

        void getN();
        

       // private void getN();//error 方法默认是public,不能使用其他访问控制修饰符

 }

在定义接口方法时不需要方法体。 但是在抽象类中,只有抽象方法不需要方法体,非抽象方法必须要有方法体。

代码语言:javascript
代码运行次数:0
运行
复制
public abstract class MAbs{


        public static final String E = "DD";
        public abstract void getT();
        public void getW{

        }

        void getW(){

        }
    }

第二个方面:用法方面 抽象类也属于类,所以类就只能被单继承,继承类使用extends关键字。 而接口却可以多实现,利用implements关键字,各接口之间用逗号隔开

代码语言:javascript
代码运行次数:0
运行
复制
public class R extends MAbs implements IManager,IRead{
}

在extends抽象类后需要覆写抽象类中的所有抽象方法,需要覆写implements接口中的所有方法

代码语言:javascript
代码运行次数:0
运行
复制
 public class R extends MAbs implements IManager,IRead{


        @Override
        public void getS() {
            
        }

        @Override
        public void getN() {

        }

        @Override
        public void getT() {

        }
    }

1,接口 中定义的方法访问权限默认为public,所以实现该接口的方法时访问控制修饰符必须为public,不能省略。 子类覆写父类方法时访问权限必须要 大于父类。 2,可以通过匿名内部类的方式使用接口,但抽象类不行

代码语言:javascript
代码运行次数:0
运行
复制
 IManager m = new IManager() {
            @Override
            public void getS() {

            }

            @Override
            public void getN() {

            }
        };

 //MAbs s = new MAbs()//error
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档