多态
概念:
父类引用指向子类对象,从而产生多种形态。
Person a = new Student();
二者具有直接或间接的继承关系时,父类引用可指向子类对象,即形成多态。
父类引用仅可调用父类所声明的属性和方法,不可调用子类独有的属性和方法
下面举两个体现多态的例子:
1、传参多态
以父类作为参数时,可以传父类的子类作为参数(有点拗口,直接上案列)
先定义一个Person类作为父类
public class Person {
String name;
}
再定义Student类和Teacher类作为Person类的子类并继承
Student类:
public class Student extends Person {
}
Teacher类:
public class Teacher extends Person {
}
再来个测试类Test:
public class Test {
public static void main(String[] args) {
Student student = new Student();//创建学生对象
student.name = "学生";
Teacher teacher = new Teacher();//创建老师对象
teacher.name = "老师";
eat(student);//执行方法
eat(teacher);
}
//定义一个方法,Person类的对象作为参数
private static void eat(Person person) {
System.out.println(person.name + "吃饭");
}
}
执行结果:
我们定义的eat(Person person)方法传递的参数是Person类的,但是当我们传递的参数为Person类的子类(Student类和Teacher类)时,程序正常执行。上面的示例就是传递参数的多态。
2、返回值的多态
以父类作为返回值类型时,可以用子类作为返回值类型。(直接上案列)
private static Person print(int type){
switch (type){
case 1:
return new Student();//返回一个Student类型的对象,程序正常执行
case 2:
return new Teacher();//返回一个Teacher类型的对象,程序正常执行
}
return null;
}
我们定义的print方法返回值是Person类型的,实际上只要是Person类型的子类对象都可以作为返回值返回。这是返回值的多态。