重载(overload):
方法的重载是指一个类中可以定义有相同名字,但参数不同的多个方法。调用时,会根据不通的参数表选择对应的方法,即函数名一样,返回值类型一样;但参数不一样,参数类型不一样或者参数个数不一样。
构造方法也可以重载,具体调用根据参数列表进行调用。
重写(override):
- 在子类中可以根据需要对从基类中继承来的方法进行重写
- 重写方法必须和被重写方法有相同方法名,参数列表和返回类型
- 重写方法不能使用比被重写方法更严格的访问权限
- 重写时最好直接将基类方法拷贝过来
- 重写的时候要抛同基类一样的异常,或者不抛异常
- 声明为static和final的方法不能被重写
多态
- 多态实现的三个前提:
- 存在继承关系
- 子类重新父类的方法
- 父类数据类型的引用指向子类对象 (栈内存里的父类引用指向堆内存里的子类对象)
- 多态成员访问特点:只有非静态的成员方法,编译看左边(父类),运行看右边(子类)
- 成员变量 :编译看左边(父类),运行看左边(父类)(多态中的向上转型)
- 成员方法:编译看左边(父类),运行看右边(子类)。动态绑定
- 静态方法:编译看左边(父类),运行看左边(父类) (静态和类相关,算不上重写,所以,访问还是左边的)
- 弊端
- 不能使用子类特有的成员属性和子类特有的成员方法。
- 如何解决:把指向子类对象的父类引用强制类型转变为子类类型(多态中的向下转型)
- 实际应用
- 利用多态声明形式参数,并将创建子类的匿名对象作为实际参数