感觉对你有用就给个鼓励吧~ ~ 
多态的概念: 
- package cn.fuxi.jiekou;
 
 - /**
 
 -  * 多态:某一类事物的多种存在形态
 
 -  * 
 
 -  * 例:动物中猫,狗.
 
 -  * 猫这个对象对应的类型时猫类型:猫 c = new 猫();
 
 -  * 同时猫也是动物中的一种,可以把猫称为动物:动物 c = new 猫();
 
 -  * 动物是猫和狗具体事物中抽取出来的父类型.
 
 -  * 父类型引用指向了子类对象.
 
 -  * 
 
 -  * 多态性简单说就是一个对象对应着不同类型.
 
 -  * 
 
 -  * 体现:父类或者接口的引用指向或者接收自己的子类对象.
 
 -  * 作用:多态的存在提高了程序的扩展性和后期的可维护性.
 
 -  * 前提:
 
 -  * 1.需要存在继承或者实现关系.
 
 -  * 2.需要有覆盖操作.
 
 -  * 
 
 -  * 好处:提高了代码的扩展性,前期定义的代码可以使用后期的内容.
 
 -  * 弊端:前期定义的内容不能使用(调用)后期子类的特有内容.
 
 -  */
 
  
- abstract class Animal{
 
 -         abstract void eat();
 
 - }
 
  
- class Dog extends Animal{
 
 -         void eat(){
 
 -                 System.out.println("狗吃骨头");
 
 -         }
 
 -         void lookHome(){
 
 -                 System.out.println("狗看家");
 
 -         }
 
 - }
 
  
- class Cat extends Animal{
 
 -         void eat(){
 
 -                 System.out.println("猫吃猫粮");
 
 -         }
 
 -         void catchMouse(){
 
 -                 System.out.println("猫捉老鼠");
 
 -         }
 
 - }
 
  
- class Pig extends Animal{
 
 -         void eat(){
 
 -                 System.out.println("猪吃饲料");
 
 -         }
 
 -         void gongDi(){
 
 -                 System.out.println("猪会拱地");
 
 -         }
 
 - }
 
  
- public class InterfaceDemo5 {
 
 -         public static void main(String[] args) {
 
 -                 Animal c = new Cat();
 
 -                 Dog d = new Dog();
 
 -                 method(c);//猫吃猫粮
 
 -                 method(d);//狗吃骨头
 
 -                 method(new Pig());//猪吃饲料
 
 -                 //自动类型提升,猫对象提升到了动物类型.但是特有功能无法访问,作用就是限制对特有功能的访问.
 
 -                 //向上转型,将子类型隐藏,就不能使用子类特有方法了
 
 -                 //c.catchMouse();报错
 
 -                 //如果还想用具体动物猫的特有功能,可以向下转型(强转为猫)
 
 -                 Cat c1 = (Cat)c;
 
 -                 c.eat();
 
 -                 c1.catchMouse();
 
 -                 //注意:对应转型,自始至终都是子类对象在做类型的变化.
 
 -                 Animal dog = new Dog();
 
 -                 Cat e = (Cat)dog;//编译不报错,但是运行报错,Dog无法转换成Cat
 
 -                 e.eat();//无法运行,编译不报错
 
 -         }
 
 -         public static void method(Animal a){
 
 -                 a.eat();
 
 -                 }
 
 - }
 
 
  复制代码 
运行结果: 
猫吃猫粮 
Exception in thread "main" 狗吃骨头 
猪吃饲料 
猫吃猫粮 
猫捉老鼠 
java.lang.ClassCastException: cn.fuxi.jiekou.Dog cannot be cast to cn.fuxi.jiekou.Cat 
at cn.fuxi.jiekou.InterfaceDemo5.main(InterfaceDemo5.java:70) 
 
 
多态应用案列: 
- package cn.fuxi.jiekou;
 
 - //毕老师和毕姥爷的故事
 
 - class BiLaoYe{
 
 -         void teacher(){
 
 -                 System.out.println("管理");
 
 -         }
 
 -         void fishing(){
 
 -                 System.out.println("钓鱼");
 
 -         }
 
 - }
 
 - class BiLaoShi extends BiLaoYe{
 
 -         void teacher(){
 
 -                 System.out.println("java");
 
 -         }
 
 -         void movie(){
 
 -                 System.out.println("看电影");
 
 -         }
 
 - }
 
  
- public class DuoTai {
 
 -         public static void main(String[] args) {
 
 -                 BiLaoShi bs = new BiLaoShi();
 
 -                 bs.teacher();
 
 -                 bs.movie();
 
 -                 //多态调用时,只能用重写过的父类的功能,不能用自己特有的功能
 
 -                 BiLaoYe by = new BiLaoShi();
 
 -                 by.teacher();
 
 -                 by.fishing();
 
 -                 //如果要用自己特有的功能,可以把类型转换为自己.
 
 -                 BiLaoShi by1 =(BiLaoShi)by;
 
 -                 by1.movie();
 
 -         }
 
 - }
 
 
  复制代码 
运行结果: 
java 
看电影 
java 
钓鱼 
看电影 
 
 
转换前的类型判断: 
- package cn.fuxi.duotai;
 
 - /**
 
 -  * P.S. instanceof:用于判断对象的具体类型,只能用于引用数据类型判断,通常在向下转型前用于健壮性的判断.
 
 -  */
 
 - class Animal{
 
 -         void eat(){}
 
 -         void sleep(){}
 
 - }
 
 - class Cat extends Animal{
 
 -         void eat(){
 
 -                 System.out.println("猫吃猫粮");
 
 -         }
 
 -         void catchMouse(){
 
 -                 System.out.println("猫捉老鼠");
 
 -         }
 
 - }
 
 - class Dog extends Animal{
 
 -         void eat(){
 
 -                 System.out.println("狗吃骨头");
 
 -         }
 
 -         void lookHome(){
 
 -                 System.out.println("狗会看家");
 
 -         }
 
 - }
 
 - public class InstanceofDemo {
 
  
-         public static void main(String[] args) {
 
 -                 Animal a = new Cat();
 
 -                 method(a);
 
 -                 method(new Cat());
 
 -                 method(new Dog());
 
 -         }
 
 -         public static void method(Animal a){
 
 -                 a.eat();
 
 -                 if(a instanceof Cat){
 
 -                         Cat c =(Cat)a;
 
 -                         c.catchMouse();
 
 -                 }
 
 -                 else if(a instanceof Dog){
 
 -                         Dog d = (Dog)a;
 
 -                         d.lookHome();
 
 -                 }
 
 -         }
 
 - }
 
 
  复制代码 运行结果: 
猫吃猫粮 
猫捉老鼠 
猫吃猫粮 
猫捉老鼠 
狗吃骨头 
狗会看家 
 
多态特点汇总: 
- package cn.fuxi.duotai;
 
 - /**
 
 -  * 多态时,成员的特点:
 
 -  * 1.成员变量
 
 -  * 编译时:参考引用型变量所属的类中是否有调用的成员变量?有,编译通过,没有,编译失败.
 
 -  * 运行是:参考引用型变量所属的类中是否有调用的成员变量?并运行该所属类中的成员变量.
 
 -  * 简单说:编译和运行都参考等号的左边.(成员变量全用爹的)
 
 -  * 
 
 -  * 2.成员函数(非静态)
 
 -  * 编译时:参考引用型变量所属的类中是否有调用的函数.有,编译通过.没有,编译失败.
 
 -  * 运行时:参考的是对象所属的类中是否有调用的函数.
 
 -  * 简单说:编译看左边,运行看右边.(自己有用自己,没有就借爹的)
 
 -  * 
 
 -  * 3.静态函数
 
 -  * 编译时:参考的是对象所属的类中是否有调用的函数.
 
 -  * 运行时:参考的是对象所属的类中是否有调用的函数.
 
 -  * 简单说:编译和运行都砍左边.(静态全用爹的)
 
 -  */
 
  
- class Fu{
 
 -         int num = 3;
 
 -         void show(){
 
 -                 System.out.println("fu show");
 
 -         }
 
 -         static void method(){
 
 -                 System.out.println("fu static method");
 
 -         }
 
 - }
 
 - class Zi extends Fu{
 
 -         int num = 4;
 
 -         void show(){
 
 -                 System.out.println("zi show");
 
 -         }
 
 -         static void method(){
 
 -                 System.out.println("zi static method");
 
 -         }
 
 - }
 
 - public class DuoTaiDemo {
 
 -         public static void main(String[] args) {
 
 -                 //Zi z = new Zi();
 
 -                 //System.out.println(z.num);
 
 -                 Fu f = new Zi();
 
 -                 System.out.println(f.num);
 
 -                 f.show();
 
 -                 f.method();
 
 -                 Fu.method();
 
 -                 //Zi.method();
 
 -         }
 
 - }
 
 
  复制代码 
运行结果: 
3 
zi show 
fu static method 
fu static method 
 
 
 
感觉对你有用就给个鼓励吧~ ~ 
 
 |