多态是继封装、继承之后,面向对象的第三大特性。 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。 Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。 Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。 如Student类可以为Person类的子类。那么一个Student对象既可以赋值给一个Student类型的引用,也可以赋值给一个Person类型的引用。 最终多态体现为父类引用变量可以指向子类对象。 多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。 在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。
1 public class Father { 2 public void say() { 3 System.out.println("This is Father's word"); 4 myhobby(); 5 } 6 7 public void myhobby() { 8 System.out.println("This is Father's hobby"); 9 } 10 }
1 public class Son extends Father { 2 3 private String sonname; 4 5 public String getSonname() { 6 return sonname; 7 } 8 9 public void setSonname(String sonname) { 10 this.sonname = sonname; 11 } 12 13 public void say(){ 14 System.out.println("This is Son's word"); 15 } 16 17 18 public void myhobby(String sonname){ 19 System.out.println("This's Son's hobby for String " + sonname); 20 } 21 22 }
我是测试类
public class testDuotai { public static void main(String[] args) { Father father1 = new Son(); System.out.println("实例化一个Son对象,用父亲接收"); father1.say(); father1.myhobby(); Son son = new Son(); System.out.println("实例化一个Son对象,用Son接收"); son.say(); son.myhobby(); son.myhobby(son.getSonname()); } }