多态性是指“一种定义,多种实现”。例如,画画。同是画画,但每一个人,会画出来不同的画,这就是多态。 多态主要有方法的多态和类型的多态。 今天介绍方法的多态。 方法的多态包括方法的重载和覆盖,为一种功能提供多种实现。 1、方法的重载 与一般方法的重载类似,只是在多态里面涉及到两个类而已。 例: 在本例中,父类中有set(String name)方法,在子类中对其进行了重载set(String name,String number)。在调用时,Java虚拟机能自动分清到底是父类的set方法还是子类的set方法。 class Person{ private String name; public Person(){ this("张熹熹"); } public Person(String name){ this.name=name; } public void set(String name){ this.name=name; } public void show(){ System.out.println("姓名:"+name); } } public class Student extends Person{ private String number; public Student(){ number="123"; } public Student(String number){ super(); this.number=number; } public void show(){ super.show();//调用父类的方法 System.out.println("学号:"+number); } public void set(String name,Stringnumber){ super.set(name); this.number=number; } public static void main(String args[]){ Student s1=new Student(); s1.set("李老师"); s1.show(); Student s2=new Student("645"); s2.set("lay", "107"); s2.show(); } } 其运行结果如下: 姓名:李老师 学号:123 姓名:lay 学号:107 2、方法的覆盖 子类继承父类的所有成员,但当父类的成员不能满足子类需要时,子类不能删除它们,但可以重定义。覆盖即与父类有相同的方法名和参数类型,此时,子类可重写功能。 上例当中,也有方法的覆盖。 在父类中有一个show方法,子类中同样有一个show方法,均为不带参数的方法。即为子类覆盖了父类的show方法。 //父类Person中的show()方法 public void show(){ System.out.println("姓名:"+name); } //子类Student中的show()方法 public void show(){ super.show();//调用父类的方法 System.out.println("学号:"+number); } 在上例main方法中用对象调用show方法时,调用的是子类的show方法,输出姓名和学号。
例如上例,若将main方法改为如下: public static void main(String args[]){ Personp=newPerson(); p.show(); Students1=newStudent(); s1.show(); } 其运行结果为: 姓名:张熹熹 姓名:张熹熹 学号:123 在main方法中,首先创建了一个Person类的对象p,再调用p.show(),此时调用的show()方法是Person类中的方法,只输出姓名。 而后面创建了Student的对象s1,再用此对象来调用show(),此时调用的就是Student中的show()方法,输出姓名和学号。 3、成员变量的隐藏 如果子类有和父类同名的成员变量,那么将隐藏父类的成员变量。 例:本例中,子类和父类中均有名为name的成员变量,子类隐藏了父类的name成员,故在输出时,只输出的是子类的name值。 注:如果要在子类中调用父类的隐藏成员变量,可以用super. |
|
来自: pythonjava学习 > 《待分类》