- 多态定义
顾名思义就是多种变现状态
最直观的理解:有对象名称,用对象名称打点调用方法在不同的时候执行的方法的功能是不一样的
- 多态的判断标准
1.跨类且继承,多态是以继承为基础的
2.子类重写长辈的方法
3.子类的对象赋值给长辈的引用
4.长辈的引用打点调用子类重写的方法
- 能够表达多态的应用场景
1.以长辈作为方法或函数的参数
2.以长辈作为方法或函数的返回值
- 多态的优点:
可以提高代码的复用率
可以大大提高开发效率
是程序结构优化
- 多态的缺点:
会增加类与类中间的关系,导致类与类之间的复杂度增高
- 多态例题解答
public class Demo {
public static void main(String[] args) {
A a1 = new B();
a1.Method(10.0, 10);
A a2 = new B();
a2.Method(10, 10.0);
}
}
class A {
protected void Method(double d1 , int i2) {
System.out.println("A1");
}
protected void Method(double d1 , double d2) {
System.out.println("A2");
}
}
class B extends A {
protected void Method(int i1 , double d2) {
System.out.println("B1");
}
protected void Method(double d1 , double d2) {
System.out.println("B2");
}
}
分析:
B继承了A
B重写了A中的Method()方法
a1和a2是B的对象赋值给A的引用
a1和a2打点所调用的
所以是多态
a1.Method(10.0, 10)因为参数为double和int类型,在A中由该参数是一致的所以直接调用A中的方法,输出结果为A1
a2.Method(10, 10.0)此参数为int和double,在A和B中并没有相应的方法与之对应,但是int和类型可以向上转型为double类型,所以就是double和double类型的两个参数,所以调用B中重写的方法,输出结果为B2