多态的概念
去完成某个行为,当不同的对象去完成时会产生出不同的形态
多态实现的条件
1、必须在继承的体系下
2、子类必须要对父类中的方法进行重写
3、通过父类的引用调用重写的方法
多态的体现:在代码运行时,当传递不同的对象时,会调用对应类中的方法。
具体我们来看以下代码实现:
public class Animal{
String name;
int age;
public Animal(String name,int age){
this.name=name;
this.age=age;
}
public void eat(){
System.out.println(name+"吃饭");
}
public class Cat extends Animal{
public Cat(String name,int age){
super(name,age);
}
public void eat(){
System.out.println(name+"吃鱼");
}
}
public class Dog extends Animal(){
public Dog(String name,int age){
super(name,age);
}
public void eat(){
System.out.println(name+"啃骨头");
}
}
public class Chicken extends Animal(){
public Chicken(String name,int age){
super(name,age);
}
public void eat(){
System.out.println(name+"啄米");
}
}
下面来写类的调用:
public class TestAnimal{
public static void eat(Animal a){
a.eat();
}
public static void main(String[] args){
Cat cat=new Cat("咪咪",2);
Dog dog=new Dog("旺财",1);
eat(cat);
eat(dog);
}
多态的优缺点
优点:
1、可以降低代码的复杂度,避免使用大量的if-else语句
public static void tAnimal(){
Cat cat=new Cat();
Dog dog=new Dog();
Chicken chicken=new Chicken();
String[] animals={"cat","dog","chicken"};
for(String animal:animals){
if(animal.equals("cat"){
cat.eat();
}else if(animal.equals("dog"){
dog.eat();
}else if(animal.equals("chicken"){
chicken.eat();
}
}
}
如果使用多态
public static void tAnimal(){
String[] animals={new Cat(),new Dog(),new Chicken()};
for(String animal:animals){
animal.eat();
}
}
2、可扩展能力更强
如果再新增一种动物,也很容易
public class Pig extends Animal{
public Chicken(String name,int age){
super(name,age);
}
public void eat(){
System.out.println(name+"吃饲料");
}
}
缺点:
代码的运行效率低,主要体现在
1、属性没有多态性
当父类和子类都有同名属性的时候,通过父类的引用,只能引用父类自己的成员属性
2、构造方法没有多态性