Java三大特性之一 (多态)

什么是多态(核心概念):

多态就是指同一操作,作用于某一类对象,可以有不同的解释,产生不同的执行结果。 
(考虑到文字讲解会不会有点抽象,下面用代码来演示更直观些)在写代码前我先说两个死公式(没有为什么,反正就死公式):
(重点一) 
多态存在的三个必要条件: 

1、需要存在继承关系。           既:子类要继承父类            (结论:继承是实现多态的基础)
2、需要存在实现关系。           既:子类要重写父类的方法  (结论:要有方法的重写)   
3、父类引用指向子类对象。   既:(父类) Animal  obj  =  new  (子类) Dog (); (结论:父类数据类型的引用指向子类对象)
(重点二)
多态的作用:
1、多态消除了类型之间的耦合关系。

既:Animal obj  =  new  Dog ();    父类 Animal 指向子类 Dog ();  就由 Dog ();  对象来实现 Animal  里面的方法 

既:Animal obj  =  new  Cat ();     父类 Animal 指向子类  Cat ();   就由 Cat ();   对象来实现 Animal  里面的方法 

      总结:父类指向谁就由谁来实现父类里面的方法,类型之间相互独立不受彼此的影响,所以说多态消除了类型之间的耦合关系。

2、多态的存在提高了程序的扩展性和后期的可维护性。

既:Animal obj  =  new  Dog ();    父类 Animal 指向子类 Dog ();  就由 Dog ();  对象来实现 Animal  里面的方法

既:Animal obj  =  new  Cat ();     父类 Animal 指向子类  Cat ();  就由 Cat ();   对象来实现 Animal  里面的方法 

      总结:父类指向谁就由谁来实现父类里面的方法,不仅提高了代码的扩展性也提高了代码的可维护性。

3、多态通过分离做什么(父类)和怎么做(子类),从另一个角度将接口和实现进行分离。


/**
  * 创建一个父类 Animal (动物)
  */
public class Animal {
public void eat(){     
System.out.println("动物具有吃的能力");
}
}

/** 
 * 创建一个子类 Dog (狗)并继承父类 Animal (动物) 
  */
public class Dog extends Animal {
@Override
public void eat() { // 子类重写了从父类继承过来的方法
System.out.println("狗具有吃骨头的能力");
}
 public void attack() { // attack 是子类独有的方法,不是从父类继承过来的
System.out.println("狗具有攻击的能力");
}
 }

/**
 * 创建一个子类 Cat (猫) 并继承父类 Animal (动物)
 */
public class Cat extends Animal {
 
// 子类 Cat 什么都没有,只是单单的从父类继承了所有的东西过来 
}

/**
  * 主程序类  Test
  */
public class Test {
public static void main(String[] args) {
Animal obj = new Animal(); // 父类的引用指向本类的对象
a.eat(); // 调用的是本类的方法


Animal obj2 = new Dog(); // 父类的引用指向子类的对象
d.eat(); // 调用的是子类重写后的方法(程序会优先调用子类重写过的方法)
// d.attack(); //父类的引用指向子类的对象,不能调用子类独有的方法。只能调用它跟父类有关联的方法


Animal obj3 = new Cat(); // 父类的引用指向子类的对象
c.eat(); // 调用的是从父类继承过来的方法
}
 }


执行结果如下:



动物具有吃的能力
狗具有吃骨头的能力
动物具有吃的能力