多态性
- 静态多态:也称为编译期间的多态,编译器在编译期间完成的,主要通过函数重载实现。编译器根据相同函数名的不同参数列表,可推断出要调用哪个函数。
public class Person {
public void say(){
System.out.println("我是第一个名为say的方法!");
}
public void say(int n){
System.out.println("我是第二个名为say的方法!!");
}
}
//测试
public class Main {
public static void main(String[] args) {
Person p1=new Person();
p1.say();//我是第一个名为say的方法!
p1.say(4);//我是第二个名为say的方法!
}
}
- 动态多态(动态绑定):即运行时的多态,在程序执行期间判断所引用对象的实际类型,根据其实际类型调用相应的方法。
//父类
public class Person {
public void say(){
System.out.println("我是一个人!");
}
}
//子类1
public class Student extends Person{
public void say(){
System.out.println("我是一名学生!");
}
}
//子类2
public class Worker extends Person{
public void say(){
System.out.println("我是一名工人!");
}
}
//测试
public class Main {
public static void main(String[] args) {
Person p1=new Student();//编译时即静态时系统只知道p1为Person类型,但运行时即动态时系统判断出p1的实际类型为Student,并根据实际类型调用相应的方法
Person p2=new Worker();//编译时即静态时系统只知道p2为Person类型,但运行时即动态时系统判断出p2的实际类型为Worker,并根据实际类型调用相应的方法
p1.say();//我是一名学生!
p2.say();//我是一名工人!
}
}
标签:p1,java,面向对象,多态性,void,class,Person,say,public
From: https://www.cnblogs.com/yang-xiaojie/p/18064710