八.抽象类
有些类的实例不存在,但他代表一类不同对象的集合。如Animal类,没有动物叫Animal,但Animal尤其子类Dog,Cat等等。
抽象除了被继承外,没有值和用途
抽象的方法:抽象类中的某些行为在没有特定运行时没有任何意义,没有任何通用的实现是可行的。抽象的方法必须在抽象的类中定义。
就算无法实现方法的内容,但是可以定义出一组子类共同的协议。为了标记多态而存在。
子类必须要实现抽象类的所有抽象方法
Objectlei为所有类型的父类
编译器是通过引用类型来确认有哪些方法可以调用,而不是Object 的真正类型
Object o=dogs.get(index);
o.bark();//不允许
o.hashCode();//Object原本的方法,可以
每个对象除了真正的类型外,还可以被当作Object类型来处理
类型转换:
if(b instanceof Dog)
Dog a=(Dog)b;
九.接口
宠物需要实现pet()方法,但狮子老虎不需要,而他们共同继承Animal 类:
1.用继承:有些方法父类有,但子类不需要有,如果继承就不符合了。有些动物没有宠物的行为…
2.用抽象:无论需不需要,所有子类必须覆盖抽象方法,浪费时间,难以复用
3.把方法加到需要的地方:多态不起作用,无法确定同一类方法是bePlet()还是doPlet(),需要针对个别类进行特殊设计
4.java不支持多重继承
解决方法:接口,接口所有的方法都是抽象的
大部分良好的设计不需要在抽先层面实现所有细节,我们需要的只是一个共同的合约,让子类去实现细节也是很好的。
允许不同继承树的类实现相同接口