- 多态性是OOP中的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有在执行过程中才被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展性。
java中如何实现多态?使用多态的好处?
1.引用变量的两种类型:编译时类型(模糊一点,一般是是一个父类,由声明的类型决定)、运行时类型(运行时,具体是哪个子类就是哪个子类,由实际对应的对象类型决定)。多态的存在要有3个必要条件
1.要有继承
2.要有方法的重写
3.父类引用指向子类对象
package theChildOfGod.bjxy.oop.polymorphism;
public class Animal {
String str;
public void voice() {
System.out.println("普通动物叫声!");
}
}
class Cat extends Animal{
public void voice() {
System.out.println("喵喵喵");
}
public void catchMouse() {
System.out.println("猫抓到了老鼠!");
}
}
class Dog extends Animal{
public void voice() {
System.out.println("汪汪汪");
}
}
class Pig extends Animal{
public void voice() {
System.out.println("哼哼哼");
}
}
package theChildOfGod.bjxy.oop.polymorphism;
public class Test {
public static void testAnimalVoice(Animal c) {
c.voice();
if (c instanceof Cat) { //instanceof是判断一个对象是不是
//这个类型的对象
((Cat) c).catchMouse(); //之所以要强转是因为编译器不认c,
//要将c转换成Cat才可以
}
}
public static void main(String[] args) {
/* Cat c = new Cat();
Animal a = c; */
Animal a = new Cat();
testAnimalVoice(a);
/* Dog d = new Dog();
testAnimalVoice(d); */
Animal b = new Dog();
testAnimalVoice(b);
/* Pig p = new Pig();
testAnimalVoice(p);*/
Animal c = new Pig();
testAnimalVoice(c);
Cat a2 = (Cat)a;
a2.catchMouse();
//最后一个可以通过编译,但是运行时就报错。因为猪不可以强转成猫。
Cat a3 = (Cat)c;
a3.catchMouse();
}
}