java 接口中的成员只有静态常量和_Java中抽象类和接口的具体区别是什么?

谢邀,直接回答。

接口在面向对象编程中占着很重要的地位,它是对于一种事物行为的抽象提取,内部只需要持有接口的引用,外部可以根据具体事物做不同的扩展,而不修改内部的引用逻辑,它的主要作用是在框架中实现不同对象的相互引用解耦,而不是持有具体类的引用。在百度中对接口的定义:对接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互的方式。

定义一个接口的格式如下:

[public] interface InterfaceName {

}

接口变量会被隐式的指定为public static final,如果用public修饰会报编译错误,而方法会被隐式指定为public abstarct,用其他修饰符修饰就会报错。接口的方法不能有具体的实现,它是一种极度抽象的类型,比抽象类更加抽象,一般不会在接口中定义变量。

类实现接口使用implements

class ClassName implements Interface1,Interface2,[....]{

}

一个类可以实现多个接口,且必须实现里面的所有方法

抽象类 同样在面向对象编程中占有一定的地位,它可以对于某一种事物的抽象能力提取,同时可以在抽象类中实现公有的行为,也可以对接口做一定的适配,减少具体实现类要重写所有方法的问题,起到一个适配器的作用,同时在编程中担任一个基类 的作用,对于公有行为的提取。百度中对抽象类 的定义如下:抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。

抽象方法定义格式:

[public] abstract class ClassName {

abstract void fun();

}

抽象类定义格式:

[public] abstract class ClassName {

abstract void fun();

}

由于抽象类含有无具体的实现方法,所以抽象类不能用来创建对象,抽象类也可以无抽象方法,只要类是抽象的。

和普通类的区别:

1 .抽象方法必须是public或者protected,缺省为public,为private则子类无法实现抽象类方法

2 .抽象类不能用来创建对象

3 .一个类继承抽象类,必须实现里面的所有抽象方法。

异同

1.同1 .不能实例化;

2 .包含未实现的方法声明;

3 .派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员)。

2.异

语法层面:1 .类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。

2 .抽象类当中可以存在非抽象的方法,可接口不能,且它里面的方法只是一个声明必须用public来修饰没有具体实现的方法。

3 .抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static final)。

4 .抽象类是对象的抽象,然而接口是一种行为规范。

5 .接口不能包含构造器,抽象类可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。

设计层面:

1 .抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

2 .设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。

使用场景

1 . 由于抽象类中不一定都是抽象方法,也可以有具体的方法,所以可以把公有的方法提升到抽象类中,然后具体的方法留给子类实现(模板设计模式) ,可以更好的实现代码的复用,典型的BaseActivity,BaseFragment

2 . 抽象类表示的是这个对象是什么,而接口表示的是这个对象能干什么 ,面向对象的编程语言中,一个类只能继承一个类(抽象类),但是可以实现多个接口。当你关注一个事物的时候,用抽象类;当你关注一个操作的时候,用接口。

3 .另一个重要的概念就是多态,多态通过分离做什么和怎么做,从另一个角度将接口和实现分离出来。多态不但能够改善代码的组织结果和可读性,还能创建可扩展的程序—-即无论在项目最初创建时还是在需要添加新功能时都可以“生长”的程序。由于接口更关注于动作的实现,多态主要是分离“做什么”和“怎么做”,所以接口的另一个重要的应用就是多态的实现(当然抽象类也可以实现多态,但是接口更加合适)。

抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的所有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口,在设计阶段会降低难度的。

希望对你有帮助.

学Java刚入门或者想入门的小伙伴,可以关注我的知乎主页

关注我的知乎专栏,一起加油~!Java学习​zhuanlan.zhihu.com24680d92ed93b4e40036c46c89e7b59b.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值