一、方法的重写
Override,方法的覆盖,运行时多态
重载(Overload)与重写(Override)的区别?
意义:子类与父类之间,不同子类之间,在同一个行为上有不同的实现
代码:子类需要重新实现(重写)父类的某一个行为(方法)
子类的重写方法必须与父类的方法名是同名,同参,同返回值类型
子类重写方法的访问权限不能低于父类方法
二、多态的实现和现实意义
一种参数可以适配多种类型,实现不同类型同一种行为的调用
开闭原则:程序对扩展开放,对修改关闭。
实现多态的条件:
1.为多态支持的类型抽取共同的父类 — 构建一个继承体系
2.共同的行为在父类中定义,子类中进行重写 — 通过重写实现不同类的实现细节
3.构建多态方法,它的参数是使用父类类型 —利用上溯造型支持不同类型的传入
4.多态方法内调用重写方法 ---- 实现多态的效果
多态的优点:
实现了开闭原则,在扩展新的类型时,多态方法不用修改
三、实现多态的过程中遇到的问题
问题1:有些场景下,抽取的父类是一种概念,没有实物。
父类不是具象化的东西,本身是抽象的
在程序上不应该出现父类的实例化
如 animal a=new animal();//不能写,不可以实例化
问题2:父类中定义的共同行为,在父类中无法编写细节
问题3:在扩展新的类型时,可能忘记重写父类的行为。
四、抽象关键字abstract
抽象关键字用来修饰类和方法
抽象类:不能实例化,解决问题1
抽象方法:不需要给出方法的实现,只需要方法定义即可,解决了问题2
子类继承父类后,必须实现(强制重写)父类中所有的抽象方法,解决问题3
现实意义:一些概念性的父类,一些只能给出定义不能给出实现的行为
抽象类:
1.抽象类不可以实例化,但是允许有构造方法(给子类使用)
2.抽象类在继承体系中处于父类的位置
3.抽象类中允许有属性,构造方法,普通方法,抽象方法
抽象方法
1.抽象方法没有方法体{},只有一个方法定义
2.抽象方法必须定义在抽象类或接口中,不能定义在普通的类中
3.一个普通(抽象类不用)的类继承了抽象类后,必须实现其中所有的抽象的方法。
五、接口interface
类的关键字是class,接口的关键字是interface。
接口的特点:
1.不能实例化
2.允许作为对象类型,通过"子类"去实例化
3.接口中只能声明常量,公有抽象方法,Lamda表达式
4.一个Java类只能继承一个直接的父类,但是可以同时"实现"多个接口
接口的意义:
1.对Java单继承的补充
2.接口是对某种行为(某种能力)的描述
public class 子类 extends 父类 implements 接口1,接口2,接口3
public class 子类 implements 接口A,接口B
如果一个父类能被设计成一个接口,那就不设计成类。