深入理解类、抽象类与接口的区别

网上有很多关于此的文章,但是这些答案大多都是从这些类的具体不同出发罗列,十分难记甚至很多答案都是冲突的。我尝试从设计思想角度的不同来阐述这三者区别,并深一步理解他们的具体不同。
我们循序渐进从普通类开始说起,普通类的设计思想是基于面向对象特征之一的抽象设计的,目的是封装一个事物的行为(方法)和特征(属性),设计思想是针对事物的处理,我们通过普通类可以抽象出所有的事物,按理说到这一步我们开发只使用普通类也完全够了,但是在处理一些相似类的时候(父子类),很麻烦,一些类共有的属性或方法要写很多次,我们想要处理这些类与类之间的关系,于是就有了继承关系。
有了继承之后我们又发现父类的某些方法,并不一定需要在父类实现,我们更想让父类中某些方法充当一个灵活的模板让各种不同的子类去实现,父类完全没有必要实现此方法,那么这种有些方法都不需要实现的父类叫什么好呢?普通类是基于抽象实现的,这种部分行为具体实现都没有的类就更抽象了,于是就叫抽象类。通过其设计思想,我们可以了解到,抽象类是一个基于继承关系以方便子类实现方法而设计的类。
由此我们可以得出其设计之初就是为了抽象方法,没有抽象方法不如我们就使用普通的父类,而抽象类中的抽象方法是没有具体实现的,在实例化时无法找到其行为具体实现,所以无法实例化。在这里可以解释为什么有的人说抽象方法必须有抽象方法有的人却说可以没有,是因为基于设计思想的角度,我们正是因为想搞出一个抽象方法才有了抽象类这一特殊父类,但基于语法的角度,你的确可以没有抽象方法,
而在抽象类的基础之上,我们想让这个父类中的所有行为都变成模板把父类的属性也变成子类全部有的属性,子类想怎么用这个模板和属性就怎么用,于是就有了接口。在这里接口的所有方法都是public abstract不必解释,其所有属性必然是public static final,是因为这个属性是所有子类共同抽象出来的一个特征,子类要继承就要public否则访问不到,如果是非静态的,那么子类中的静态方法就无法访问到该共同特征,或者在我想访问这个接口有什么特征的时候也必须实例化接口才可以访问到,而接口与抽象类一样无法实例化,所以一个访问有问题的公共特征,这与接口的设计初衷是相违背的,为什么是final是因为如果我们可以在子类中随意更改此公共特征,那他就不配称为一个公共特征,公共特征本身就是从子类中抽取出来的,是不会在子类中左右变化的,如果很想要在子类中改变此特征为子类自己的特征,我们应该在子类中设计子类自己的一个特征。
以上都是个人总结,如有不对,敬请斧正,特别是关于接口变量为static的部分。

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值