java-----------------多态
多态,当前指的是 java 所呈现出来的一个对象
  
多态
  
 定义
  
 
 多态是指同一个行为具有多个不同表现形式或形态的能力。在面向对象编程中,多态通过方法重载和方法重写来实现。
强弱类型语言
javascript 或者python 是弱类型语言
C 语言,或者 C++也好,是强类型语言
  
通俗来讲,强类型语言是指当前的数据类型是确定好了的,每次赋值必须要用表示该类型的特定字符,否则报错,反之则为弱类型语言
 java /C /C++ 等,当中的数据类型,它决定数据在内存当中的存储形式。
 对于 python /javascript等,没有什么数据类型,统一用一个变量(如var)代替所有的数据类型
PS:继承的本质是代码的复用,而代码复用的实现方式就是能够调用父类的变量和方法
 方法重载
  
 概念:在同一个类中,允许存在多个同名方法,但这些方法的参数列表不同(参数个数、类型或顺序不同)。
  
 public class Calculator {
     public int add(int num1, int num2) {
         return num1 + num2;
     }
    public double add(double num1, double num2) {
         return num1 + num2;
     }
 }
  
  
 在上述代码中, Calculator 类有两个 add 方法,通过参数类型的不同来区分。
  
 方法重写
  
 概念:子类重写父类中已有的方法。要求方法名、参数列表和返回值类型必须与父类中被重写的方法一致(在Java中,返回值类型可以是父类返回值类型的子类,这是协变返回类型)。
  
 class Animal {
     public void makeSound() {
         System.out.println("动物xxxxxx");
     }
 }
class Dog extends Animal {
     @Override
     public void makeSound() {
         System.out.println("汪汪汪");
     }
 }
  
  
 这里 Dog 类重写了 Animal 类的 makeSound 方法。
如下图:

由图可知,B继承自A,C、D继承自B,从Test的main方法可推断
1、"A and A"
a1这个变量引用的是A类型,b引用的是B类型,B继承自A,A中有两个方法,分别要输入参数A和D,B继承于A,此时B的类型向上转型为A,则此时a1.Show(b)即为A.Show(A),结果为A and A
2、"A and A"
同理1,C继承自B,向上转型至B,但没有以B为参数的方法则再次向上转型为A
3、"A and D"
A中就把本来就含有以D为参数的方法,则不会转型,此时会直接调用输出A and D
4、"B and A"
a2引用B方法,B继承自A,所以理论上来说a2可以同时调用AB中的4个方法,但是B会对A中的Show(A)方法进行重写。所以b调用的B方法由B向上转型为A后,输出的结果为B and A
5、"B and A"
同理1,C继承自B,向上转型至B,但没有以B为参数的方法则再次向上转型为A,B对A中的Show(A)方法进行重写,输出B and A
6、"A and D"
同理3,对Show(A)改写但对Show(D)无影响,输出A and D
7、"B and A"
同理4
9、”A and D“
同理3,对Show(A)改写但对Show(D)无影响,输出A and D
