应用时接口和类的选择原则(java)

 


       上述所有的类型中,只有class和final class属于实例类,可以直接创建它们的实例,两者的不同在于,final class不能再被其它类继承和扩展,且它的所有方法都将自动地设为final。设为final的方法不能被子类覆盖(如果可以有子类的话)。final类的中的字段不会被自动设为final。对于final字段,在对象构造以后,其值就不能再修改了。
      interface和abstract class具有类似的功能,都必须被实现或继承才能发挥其价值,且继承或实现他们的实例类必须覆盖其中所有的抽象方法。不同点有3:
1. 一个类只能扩展一个父类(class或abstract class),却可以实现多个接口,这是接口的主要价值所在。请问还有其它优于抽象类的价值吗?
2. interface中只能定义常量,而抽象类没有这一限制。
3. interface中的所有方法都必须是抽象方法(不能有方法体),且不需要abstract修饰符,抽象类中可以有实现了的方法(静态的和实例的),且其抽象方法必须有abstract关键字。
         很多程序员认为抽象类中只能有抽象方法。这是不正确的。把尽可能多的功能,不管是不是抽象的,放到超类中是好的做法。特别是,要把通用字段和非抽象方法移到抽象超类中。 
在应用时,选择类还是接口,选择什么样的类,主要是根据需要的字段、方法,以及类是否需要扩展等来确定,很难有固定而明确的说法。以上只是给了一些基础的原则,以免走了弯路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值