多态,当前指的是 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