什么是多态
我对于多态的理解比较简单:就是对象具有多种形态。父类引用指向子类,在执行过程中判断实际类型,调用不同的方法。
多态有什么作用呢?
为了消除类型之间的耦合关系
多态例子
比如animal,这是动物的统称,现在有dog,cat他们也属于动物,所以他们与animal之间是继承关系,他们可以直接使用父类的方法,也可以重写。比如animal可以吃东西,睡觉。dog、cat也是要吃东西睡觉,为了让代码更灵活,减少代码量,就使用多态来。
class Animal {
void eat() {
System.out.println("动物吃东西");
}
}
class Dog extends Animal {
void eat() {
System.out.println("狗吃骨头");
}
void doWork() {
System.out.println("狗看家");
}
}
class Cat extends Animal {
void eat() {
System.out.println("小猫吃鱼");
}
void watch() {
System.out.println("猫抓鱼");
}
}
class Person{
void feedAnimal(Animal anim) {
System.out.println(anim.getClass());
anim.eat();
//1。类的强制类型转换:把父类对象赋值给子类类型
//2.instanceof : 判断一个对象是否是指定 的类, 如果是 返回 true 不是, 就返回 false
if(anim instanceof Dog) {
Dog dog = (Dog)anim;
dog.doWork();
}else if(anim instanceof Cat) {
Cat cat = (Cat)anim;
cat.watch();
}
}
}
public class Test1{
public static void main(String[] args) {
// 狗是动物类
// 一个对象有多种形态 就称它是多态
// 一个表示自己的类,一个表示自己父类的类型
/**
* 多态的特点: 子类对象赋值给父类类型 运行时,
* 表现的是子类的特征(先去找子类的方法)
* 多态运行时 还是自己new的对象本身类
*/
Animal dog = new Dog();
Animal cat = new Cat();
Person per = new Person();
per.feedAnimal(dog);
per.feedAnimal(cat);
}
}
}