多态
Java的引用变量类型有两种:一种是编译时类型,一种是运行时类型
class Person{
}
class Student{
}
class Test{
public static void main(String[] args) {
Person p = new Student();
// 此处Person为编译时类型,Student为运行时类型
}
}
如果编译时类型和运行时类型不一致,就会产生多态
对同一个方法的调用,由于对象不同可能有不同的行为。
要点:
- 多态是方法的多态,不是属性的多态
- 多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。
- 父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出
代码示例:
package _06Polym;
/*
* 测试多态
* 父类引用指向子类对象
*/
public class TestPolym {
public static void main(String[] args) {
Animal a = new Animal();
animalCry(a);
Animal d = new Dog();//d为编译类型,Dog对象才是运行时类型。
animalCry(d);
Dog d1 = (Dog)d; //d使用运行时类型的方法时,需要强转
d1.seeDoor();
}
static void animalCry(Animal a) {
a.shout();
}
}
class Animal{
public void shout() {
System.out.println("动物叫!!");
}
}
class Dog extends Animal{
public void shout() {
System.out.println("www!!");
}
public void seeDoor() {
System.out.println("看门中!!");
}
}
class Cat extends Animal{
public void shout() {
System.out.println("mmm!!");
}
}