多态机制是面向对象技术的精华之一,它是建立在继承基础之上的。
多态(polymorphism):某一类事物的多种存在形态。
思想基础
类的继承中,子类在父类的基础上进行扩充和改造,父类拥有的成员子类中都有,子类的对象应该比父类的对象功能强,因而子类的对象应可以替代父类的对象被使用。
人是学生、教师、工人等具体事物中抽象出来的父类型。
class Person { String str = "Person"; public void print(){ System.out.println("父类print()方法,对象是:"+this.toString()); } }
class Student extends Person { String str = "Student"; public void print(){ System.out.println("子类print()方法,对象是:"+this.toString()); } public void display(){ System.out.println("子类print()方法,对象是:"+this.toString()); } }
class StudentTest { public static void main(String[] args) { Person p1 = new Person(); System.out.println("Person变量p1.str="+p1.str); //p p1.print(); //父,p Student s = new Student(); System.out.println("Student变量s.str="+s.str); //s s.display(); //子,s s.print(); //子,s Person p2 = new Student(); //类型的提升,向上转型 System.out.println("Person变量p2.str="+p2.str); //p p2.print(); //子,s //p1.display();错:person中没有此方法 Student s1 = (Student) p1; //向下转型 s.display(); //子,s } }
例2. (3,7)
class Animal { public void eat(){ System.out.println("吃"); } }
class Dog extends Animal { public void eat(){ System.out.println("我爱吃骨头"); } public void say(){ System.out.println("汪汪汪") }
class Cat extends Animal { public void eat(){ System.out.println("我唉吃鱼"); } public void catMouse(){ System.out.println("我会捉老鼠"); } }
class Test { public static void funEat(Animal a){ a.eat(); if (a instanceof Cat) { Cat c = (Cat)a; c.catMouse(); } } public static void main(String[] args) { Cat c1 = new Cat(); funEat(c1); Dog d = new Dog(); funEat(d); } }
程序测试
class A{ float var=1.1f; float method(){ return var; } } class B extends A{ float var=2.2f; float method(){ return var;} }若定义A a=new A(),则a.var和a.method()的值是多少? 1.1,1.1