概念及特征
多态是指,针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法。
多态的特性就是,运行期才能动态决定调用的子类方法。对某个类型调用某个方法,执行的实际方法可能是某个子类的覆写方法。
用例
说明:四个文件,一个父类Person ,两个子类Chinese,English,一个测试类Main
Person.java
package org.example;
/**
* @author li.kebo
* @version 1.0
* @date 2023/9/5 8:33
*/
public class Person {
protected String name;
public void say(){
System.out.println("hello");
};
public Person() {
}
public Person(String name) {
this.name = name;
}
}
Chinese.java
package org.example;
/**
* @author li.kebo
* @version 1.0
* @date 2023/9/5 8:33
*/
public class Chinese extends Person{
public Chinese(String name) {
super(name);
}
@Override
public void say() {
System.out.println("你好," + name);
}
}
English.java
package org.example;
/**
* @author li.kebo
* @version 1.0
* @date 2023/9/5 8:33
*/
public class English extends Person{
public English(String name) {
super(name);
}
@Override
public void say() {
System.out.println("hello," + name);
}
}
Main.java
package org.example;
/**
* @author li.kebo
* @version 1.0
*/
public class Main {
public static void main(String[] args) {
/*多态的应用
* 首先,English 和 Chinese 继承Person 并重写方法say,同时都需要有参构造函数
* 在Main中创建一个方法fun,其调用了Person的say方法,也需要传入一个person类型的参数
* 因为存在多态 ,在测试时,我new 了English,Chinese对象,将其传入到fun方法中,
* 这样会动态根据传入参数的类型去调用不同的say方法。
* */
English english = new English("kbl");
Chinese chinese = new Chinese("王五");
fun(english);
fun(chinese);
}
private static void fun(Person p){
p.say();
}
}
运行结果:
hello,kbl
你好,王五