关于抽象类和接口

1、关于抽象类和接口

一、 抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类,抽象类有构造函数但是不能调用
二、 接口里的变量 即使你不声明 也默认的是 public static final 修饰的,接口中的方法也都是抽象方法,默认的都是  public abstract 方法
三、 抽象类只能实现单继承,但是 接口却可以实现多继承

2、抽象类有构造函数而接口没有构造函数,为什么那?

  解释1、
  构造方法提供了实例化一个具体东西的入口,而接口只是用来表述动作,表述规范来的。
  你可以new一台computer,但你无法new一个IDE、SATA、PCI-E、PS-2。
  因此,接口要构造方法何用?
  解释2、
  接口是为相关的实体对象提供交流的工具,也是一个对功能比较清晰、细节实现模糊的动作的抽象概念。接口中不能定义任何方法体,即使是空的方法体。虽然接口也可以有数据成员(public static final类型),但这很少用,而且接口的数据域成员是无法被继承下来,接口的约束非常强,使用时直接“接口名.数据成员”。
  很多人都想对着天空喊:“我要飞得更高!”,可是飞只是一个笼统的概念,你可以象麻雀一样叽叽喳喳地飞,可以象雄鹰一样大鹏展翅地飞,可以象火箭一样一飞冲天地飞,不知道你要怎么飞之前,你只是定义了一个接口“飞”,等你真得要以某种具体方式飞了,你再实际去定义它。如果你定义了一个实际要飞的类,那么implements这个“飞”的接口,你不飞也得实现“飞”。再如数据库的几大接口:Driver,Connection, Statement, ResultSet,它们好象程序开发早期协议,因为数据库产品众多,只能提供最上层的功能定义,具体实现由数据库产品去实现。再打个比方,我学了C驾照,但小驾车有很多,刹车的内部结构实现都会有不一样的地方,我只需要知道,我的右脚搁在中间的踏板上踩一下就可以实现刹车,我管你里边用什么传动机构,用油压还是水压,如果踩一脚没刹住,我只能说汽车公司没有实现“刹车”的接口,退车。
  接口是一种高层抽象规范,定义了一种统一的公共行为的准则,大家默认这个接口主要是负责什么,接口里的方法是用来实现什么,接口的方法使你严格使用它的返回类型,符合方法的参数类型,参数个数,参数顺序。
  而抽象类除这种纯属概念的动作之外,还可以有具体实现的动作,还可以有自己的属性。如食品是什么?那是一个抽象概念,食品可以是米饭、鱼肉、饮料、鸭肉、猪肉等。食品有他的属性,如可不可以生吃,保质期等。食品可以“吃”,那么吃就可以定义成更加抽象的接口,从这个角度来说接口是层次更高的抽象类。含有abstract方法的必须是抽象类,抽象类并不一定要有abstract方法。实现抽象类时,一般会扩展自己的属性,如,实现“食品”的鱼,它肯定有自己的特性,才会在你的头脑中形成这种形象,如红鲤鱼,它有颜色特性。抽象类中可以有实体方法,但实体类中绝不可以有抽象方法。
  说到抽象类,还是区别这两种情况,抽象类与构造方法全部私有的情况。大家可能会误认为既然构造方法为私有,也就是无法进行实例化,那么与抽象类有何区别。它们的区别在于:1)抽象象没有实体对象,而构造方法全私有时,可以通过成员方法返回实体对象,最典型是Class类,构造方法private Class(),通过newInstance()可以返回此类的对象。还有设计模式的单例模式。2)抽象方法必须有非私有的构造方法,继承类必须至于调用其中一个构造方法。全私有既然构造方法全私有,那么就封闭了向下继承的道路。因为final与abstract毕竟是一对冤家,有你没有我因为final与abstract毕竟是一对冤家,有你没有我,有我没有你。如果一个类只有静态方法,不用来随意实例化,不想被继承,那么采用final类+构造方法全私有。如果你的类想被扩展,请用抽象类吧。3)抽象类有点像接口,可以实现面向接口开发,也就是咱们平常遇到的向上转型。
  WindowListener是接口,里边很好几个方法,如果用implements实现它,即使你用不到的方法,你也必须用空方法体,在你要实现的类中。WindowAdapter就解决了这个问题,它是一个抽象类,号称实现了WindowsListener的接口,但里边方法均为空方法体,用户extends它时,只需实现自己关心的方法就可以。
  在很多参数的表示上,都是用接口或者抽象类来表示,给传入的参数更多的自由空间,只要可以向上传型为表示的接口或者抽象类都可以。以前还以为这样写法是错误的,接口或者抽象类又不能生成对象怎么做参数。 接口设计遵循ISP“接口独立原则”(Interface Segregation Principle),固有的方法均勿与延伸的方法混淆起来。对于接口,用户关心的是了解这种接口中方法功能即可,接口是一种设计重用,而继承是一种代码重用。在实际开发设计时,接口更加常用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值