[TOC]
## **多态**
多态:是指对象的多态,一个对象的多种状态
```
比如:一只狗 是狗 ,是动物,是生物
比如 一个人 是人,是动物,是生物
比如 你在学校是学生,在家里是儿子,在公司是员工,在外面是老大
```
在Java中多态.
### **前提:**
**1.必须有父子关系(必须有继承)
2.必须有方法的重写**
### **多态在Java中表现:**
1.父类类型 变量名 = new 子类类型();
父类类型的变量指向了子类
```
例如:public class Animal{}
public class Dog extends Animal{}
public class BigYellowDog extends Dog{}
代码体现
Dog d = new Dog();
Animal an = new Dog();
例,多态形式创建一个大黄狗对象
Dog d = new BigYellowDog();
2.接口类型 变量名= new 实现类();
USbInterface mm = new Mouse();
USEBIterface bb = new keyBoard();
```
### **多态中注意事项**
```
1.使用多态调用成员变量
编译时,看父类的左边
运行时,还是看父类的左边
2使用多态调用成员方法
编译时看父类左边
运行时看子类,右边
```
### **多态的好处和弊端**
只能调用子父类共有的方法才能调用
好处:提供程序灵活性
弊端 不能调用子类特有的方法
案例 定义三个方法,喂猫.喂猪,喂狗
### **总结:**
```
父类类型的变量,可以接收任何一个子类的对象
调用方法的时候,编译看父类,运行时 运行的是传递过来的子类对象中的方法
```
### **案例**
~~~
//多态类
public class Duotai {
public static void main(String[] args) {
//Animal an = new Dog();
//System.out.println(an.age);
//an.eat();
//猪吃饭
Pig pp =new Pig();
feedAnimal(pp);
}
public static void feedAnimal(Animal an){//Animal an = new Pig();
System.out.println("小宝贝,来吃饭");
an.eat();
}
}
~~~
~~~
//猪类继承动物吃饭
public class Pig extends Animal{
public void eat(){
System.out.println("猪猪吃饭了");
}
}
~~~
~~~
//动物抽象类
public abstract class Animal {
public abstract void eat();
}
~~~