关于抽象类和接口的理解:
抽象类建议这样来理解好一点:抽象者,不确定也
就是原本是一个普通的类,但是由于有了一个抽象方法,所以这个类就必须成为一个抽象类.
为什么啦!
因为定义成抽象类,就不允许直接实例化了. 想想也是显然的,因为有一个方法是抽象方法,都没有实现,
实例化成对象了,然后对象调用这个方法不久瓜了么?
这就好比车子还没有安上方向盘,如果要开的话,就没办法控制方向了.
抽象类使用的场合:
类的部分方法是确定的,而另外部分方法是不确定的,只有通过继承的子类去确定这部分方法,
但是子类可以使用抽象类的确定的方法(重用).
这儿需要注意一点:就是不要去Override 父类的非抽象方法,那写方法是给你重用的,不是给你置换的.
原则:继承应当用来扩展超类的功能,而不是置换或者撤销超类的功能
比如说,你有一个猫,然后你把狗继承自猫,但是猫可以爬树,狗不能.就只有把那个爬树的功能撤销了.想想这是多么荒唐的事情啊!!
那么何为接口啦:
就是说有一个类,所有的方法都是不确定的.
比如说 平面形状,总归有获取设置边长,面积这些方法吧,但是怎么去实现是不确定的.
好像 形状这玩意儿 的确找不到能确定的方法.那么就可以定义成一个接口.
接口允许有 public static final 的属性, 但是不推荐这样用,这是一种错误的用法.
可以认为接口就是一个特殊的 抽象类(所有的方法都是不确定的)
然后接口有一个好处,就是可多继承.
举一个例子,说明抽象类和接口一起用的地方
比如说,门这个类有Opern和Close两个方法,但是有一种特殊的门需要一个报警的功能,
但是报警不是门的特征,是报警器的特征,故可以把报警设置为一个接口
那么报警的门就从门这个抽象类和报警接口继承