对接口和抽象类的深入理解

接口是特殊的抽象类,特殊在哪里?

抽象类里面有抽象方法,抽象方法必须被子类所实现,接口里面的方法全是抽象方法,你想想接口里面的方法必然会被子类实现。所以接口就是特殊的抽象类型,只是接口里面全部都是抽象方法,而抽象类里面既有抽象方法也有普通方法。

抽象类里面可以完全没有抽象方法,也可以完全没有普通方法。但是有了抽象方法,子类必须实现它。这样可以强制让子类实现某个功能。

抽象类在使用的时候,可以多态使用,和接口一样。new的肯定是子类,抽象类不能new。

另外抽象类中的属性,默认是frendly类型,子类可以重新定义。

接口属性默认public  static  final类型,子类只能使用,不能赋值。

另外接口是公开的,不能有私有的属性和方法,因为接口是给别人用的,所有的东西全是公开的。而抽象类,可以有私有属性和方法。

 

另外抽象类和接口一样,也可以多态。多态的时候执行方法时抽象类里面被子类实现的方法,运行时多态。

什么时候使用抽象类,什么时候使用接口?

这个问题就的看他们的区别了,抽象类和接口都有共同的功能,这个功能是定义一个方法,这个方法的实现自己不实现,由子类实现。这里就有了针对实际问题的灵活性处理,因为方法里面自己可以针对自己的情况去写具体步骤。这样他们共同的作用就是定义一个模板,由子类去实现这个模板。

但是由于接口和抽象类的不同,使用用途也不同。抽象类可以有普通方法,也可以有抽象方法,那这个就可以用于定义更细致的通用的步骤,然后把更通用的步骤放在抽象方法中,这样一个类就可以完成所有流程。

但是抽象类又一个致命的缺点,导致它不够流行,因为java是单继承,多实现的。一个类如果继承了另一个类之后,就不能抽象类了,导致我们写的功能无法实现。

抽象类能实现的接口也能实现,我们可以优先考虑接口。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值