抽象类的由来:父类中的方法,被他的子类们重写,
定义:
抽象方法:没有方法体的方法;
抽象类:包含抽象方法的类
抽象:
1.定义存在该行为,具体怎么操作不知道,有下面继承的子类去完成。
抽象类,是指定父类进行行为的定义,不知道具体的实现是什么?我们就需要将实现体去掉,添加abstract关键字来标注该行为是一个定义。‘
注意事项:
1:方法被标注了abstract,那么类就会变成抽象类,也必须在class前面添加abstract;
2:不管该类中是否有实现类,只要有一个抽象行为,那么该类就是抽象类
3:抽象类不能被实例化,只有他的子类实现了她的抽象行为那么他的子类才许被实例化
4:子类实例化抽象类使用的关键字是继承extends
5:抽象类里面可以没有抽象方法,但是有抽象方法的类一定是抽象类
接口:
接口就是多个类的公共规范
接口是一种引用类型,最重要的内容就是其中的,抽象方法
把所有类相同行为进行提取,形成一个规范。
抽象类和接口都不能直接被实例化
接口和抽象类的区别在于:
1.接口里面包含抽象类,
2.抽象类的子类可以不完全实现父类的抽象方法,子类也就是一个抽象类。
3.接口他里面定义的所有抽象接口子类必须全部实现
4.抽象类使用的abstract 而接口使用的是interface
5.抽象类是使用继承关键字,而接口使用的是implements关键字
6.接口和抽象类都不能直接实例化,实现了抽象方法的子类可以进行实例化
7.在jdk1.7的时候,在接口中添加实现了静态方法和默认方法
静态方法可以使用类名.方法名进行调用,不能使用对象名.方法名,默认方法可以使用对象名.方法进行调用,甚至可以在子类中重写默认方法,但不能扩充父类功能
8.抽象类只能单继承,多层继承,但是接口可以实现多继承,每个接口之间使用逗号隔开
9.子类必须实现父类的所有接口,不管父类上面是否还有父类
10.接口既然能够多继承,那么他的两个父类重名了怎么办?如果接口中有多个同名的抽象,那么子类只实例化一个即可
实现的关键字是:implements 后续跟上接口的类名
多态的定义:是指同一行为,具有多个不同表现形式。
多态的成员属性操作
直接操作:向上转型,属性值找父类,如果没有找再去向上查找,没有则编译报错;
间接操作:父子都有,则优先使用子类,子类没有则向上找
多态的成员方法操作:
口诀:编译看左,运行看右
成员方法:
编译的时候看等号 左边的对象,在运行时才会看等号右边的内容,子类特有的行为,在父类中没有,则会编译报错