Animal类
package com.ITheima._polymorphic; public abstract class Animal { public String name="父类动物"; public abstract void run(); }
Dog类
package com.ITheima._polymorphic; public class Dog extends Animal{ public String name="子类狗"; @Override public void run(){ System.out.println("狗跑的很快"); } public void lookDoor(){ System.out.println("狗会看门"); } }
Tortoise类
package com.ITheima._polymorphic; public class Tortoise extends Animal{ public String name="子类乌龟"; @Override public void run(){ System.out.println("乌龟跑不了"); } public void layEggs(){ System.out.println("乌龟会下单"); } }
Test类
package com.ITheima._polymorphic; /** * 目标:认识多态,理解多态的形式,和概念 */ public class Test { public static void main(String[] args) { //1 多态的形势 父类类型 对象名称 =new 子类构造器 Animal a = new Dog(); go(a);// a.run();//方法编译看左边,运行看右边 System.out.println(a.name);//变量调用:编译看左边 ,运行也看左边 //a.lookDoor(); 多态下不能访问子类的独有功能 Animal a1 = new Tortoise(); go(a1);// a1.run(); System.out.println(a1.name); } /** * 要求:私有的动物都可以进来比赛 * */ public static void go(Animal a){ System.out.println("开始"); a.run(); System.out.println("结束"); } }
强制类型转换
package com.ITheima._polymorphic; /** * 目标:认识多态,理解多态的形式,和概念 */ public class Test { public static void main(String[] args) { //1自动类型转换 Animal a = new Dog(); a.run();//多态下不能访问子类的独有功能 //2强制类型转换 Dog a1 = (Dog) a; a1.lookDoor();//通过强制类型转换 可以调用子类的独有功能 Animal a2=new Tortoise(); //Dog d=(Dog)a2;//强制类型转换,编译阶段不报错(注意:又继承或实际关系编译阶段可以强制,没毛病)有iunx时 可能会出错的 if(a2 instanceof Tortoise){ Tortoise t=(Tortoise)a2;//从父类类型到子类类型 必须强制类型转换 t.layEggs(); }else if(a2 instanceof Dog){ Dog d=new Dog(); d.lookDoor(); } } }