多态
概述
多态是面向对象编程的一个特色,指的是一个方法可以有多种行为。多态与以下概念密切相关:
方法重载
重载是指用一个标识符表示同一范围内的多个事物。Java只能重载方法,不能重载变量或运算符。方法重载是指在一个类中使用同一个方法名定义多个方法,但是这些方法参数不完全一致,可能是个数不一致,也可能是参数类型不一致,还可能是参数顺序不一致,都可以让JVM判断当前要动态绑定的方法。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 class Overloading { 2 3 public void overloading(int i, char c) { 4 5 } 6 7 public void overloading(char c, int i) { 8 9 } 10 11 public void overloading(int i) { 12 13 } 14 15 }
方法重写
方法重写是子类定义的方法与父类的方法相同,包括方法名相同和参数相同,相当于是对父类方法的重写。重写的方法前常用@Override注解标识。重写方法的返回值类型可以为原父类或父接口方法的返回值类型,也可以为其子类类型。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 class Overriding extends Overloading { 2 3 @Override 4 public void overloading(char c, int i) { 5 super.overloading(c, i); 6 } 7 8 @Override 9 public void overloading(int i, char c) { 10 super.overloading(i, c); 11 } 12 13 @Override 14 public void overloading(int i) { 15 super.overloading(i); 16 } 17 18 }
上转和下转
上转是指将子类的类型转换为父类的类型。下转是指将父类的类型转换为子类的类型。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 @Test 2 void testCasting() { 3 Overriding o = new Overriding(); 4 // 上转 5 Overloading up = (Overloading) o; 6 // 下转 7 Overriding down = (Overriding) up; 8 }