多态,一般指一个程序中同名的不同方法共存的情况
从三个方面说明
1,方法覆盖实现的多态
简单的说,就是不同子类对继承父类的方法的重新定义,也就是方法的覆盖(overload),这是一个多态的形式。
2,方法重载实现的多态
简单的说,就是一个类中定义同名方法的情况,也即使重载(override),这是一个多态的形式。
重载一般采用不同的形式参数列表,包括形式参数的个数,类型和顺序的不同,来区分重载的方法。
3,对象引用的多态
一个引用型变量可以指向不同形式的对象,这基于一个事实:子类对吸纳给可以作为父类对象来使用
class Employee{}
class Manager extends Employee{}
class Director extends Manager {}
对象引用变量的多态性如
Employee emp=new Employee();//指向Employee
Employee emp=new Manager();//指向Manager
Employee emp=new Director();//指向Director
例子
class Employee{
String name;
int age;
float salary;
Employee(){ System.out.println("这是父类无参构造函数");}//为什么要定义一个无参的构造函数?不定义就报错了,why
Employee(String name,int age,float sal) {
// TODO Auto-generated constructor stub
this.name=name;
this.age=age;
this.salary=sal;
}
String getInfo(){
return "职工姓名:"+name+"年龄:"+age+"工资:"+salary;
}
}
class Manager extends Employee{
float allowance;
Manager(String name,int age,float sal,float aa) {
// TODO Auto-generated constructor stub
this.name=name;
this.age=age;
salary=sal;
allowance=aa;
}
}
public class TestPolymorphism1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Employee emp1=new Employee("wang", 23, 1000f);
System.out.println(emp1.getInfo());
Employee emp2=new Manager("li", 54, 3000f, 500f);
System.out.println(emp2.getInfo());
}
}
结果
职工姓名:wang年龄:23工资:1000.0
这是父类无参构造函数
职工姓名:li年龄:54工资:3000.0