多态性是指在类定义中出现多个构造方法或出现多个同名的成员方法。
多态性包括两种类型:静态多态性,动态多态性。
1、静态多态性:(重载)
静态多态性是指在同一个类中同名方法在功能上的重载。也包括一个类对其父类同名方法在功能上的重载。
要求同名的方法具有不同的参数列表。
不同的参数列表指得是:方法的参数个数不同、参数的数据类型不同、数据类型的排列顺序不同。
注意:仅仅是参数的变量名不同,Java虚拟机不能识别。
简单例程:
/*
* 静态多态性(重载)
*/
public class Student {
public int s_id; //学号
public int s_age; //年龄
public String s_name; //名字
//构造方法的重载
public Student(){
setData(1301,22,"xiaoming");
}
public Student(int id,int age,String name){
setData(id,age,name);
}
//成员方法的重载
public void setData(int id,int age,String name){
this.s_id = id;
this.s_age = age;
this.s_name = name;
}
public void setData(int id){
this.s_id = id;
}
public static void main(String args[]){
Student stu = new Student();
System.out.println(stu.s_id+"--"+stu.s_name+"--"+stu.s_age);
stu.setData(1316);
System.out.println("调用setData(int id)方法后");
System.out.println(stu.s_id+"--"+stu.s_name+"--"+stu.s_age);
stu.setData(1315,21,"xiaoma");
System.out.println("调用setData(int id,int age,String name)方法后");
System.out.println(stu.s_id+"--"+stu.s_name+"--"+stu.s_age);
Student stu_1 = new Student(1313,20,"xiaohong");
System.out.println("构造方法的多态性");
System.out.println(stu_1.s_id+"--"+stu_1.s_name+"--"+stu_1.s_age);
}
}
运行结果:
2、动态多态性:(重写)
动态多态性是指在子类和父类中均定义了具有基本相同声明的非静态成员方法。
也称子类成员方法对其父类基本相同声明的成员方法的覆盖。
基本相同的成员方法要求子类成员方法和其父类的成员方法具有相同的方法名,相同的参数个数,对应的参数的类型也相同,而且子类的成员方法应当比其父类的成员方法具有相同或者更广的访问控制方式。
注意:如果子类对父类的静态成员方法进行重写,并且父类引用指向子类对象,调用静态成员方法将调用在父类的静态成员方法,而不是子类的。
简单实例:
class Animal{
public String name ;
public Animal(String na){
name = na ;
System.out.println(this.name+"是一只动物");
}
public void eat(){
System.out.println("动物:"+name+"在吃饭");
}
public void sleep(){
System.out.println("动物:"+name+"在睡觉");
}
}
class Dog extends Animal{
public Dog(String na){
super(na);
}
public void eat(){
System.out.println("狗:"+name+"在吃饭");
}
public void sleep(){
System.out.println("狗:"+name+"在睡觉");
}
}
class Cat extends Animal{
public Cat(String na){
super(na);
}
public void eat(){
System.out.println("猫:"+name+"在吃饭");
}
public void sleep(){
System.out.println("猫:"+name+"在睡觉");
}
}
public class Dongtai {
public static void main(String args[]){
Animal ani = new Animal("小明");
ani.eat();
ani.sleep();
Animal dog = new Dog("小黄");
dog.eat();
dog.sleep();
Animal cat = new Cat("小白");
cat.eat();
cat.sleep();
}
}
运行结果: