采取递进的方式,了解比较好些。
多态的两种方式:
第一种方式
package abstr; //P75 Example 4_20 class 动物 { void cry(){} } class 狗 extends 动物{ void cry() { System.out.println("汪汪....."); } } class 猫 extends 动物{ void cry() { System.out.println("喵喵....."); } } public class A { public static void cry(动物 dongwu) { dongwu.cry(); } public static void main(String[] args) { 狗 gou=new 狗(); cry(gou); 猫 mao=new 猫(); cry(mao); } }
第二种方式
package abstr; //P75 Example 4_20 class 动物 { void cry(){} } class 狗 extends 动物{ void cry() { System.out.println("汪汪....."); } } class 猫 extends 动物{ void cry() { System.out.println("喵喵....."); } } public class A { public static void main(String[] args) { 动物 dongwu; dongwu=new 狗(); dongwu.cry(); dongwu=new 猫(); dongwu.cry(); } }
上边的的例子是比较著名的关于多态的例子,我们往往会倾向于第一种用的比较多,不过这个也是在于编程人员自己的习惯。
总结一下的多态的特点:
1、继承
2、子类重写父类的方法
3、上转型
多态的好处:
对不同的对象采取统一的处理。
关于上边的例子:不是每一个子类都必须要重写父类的方法,为了是子类必须要重写父类的方法,所以我们引入了“抽象类”的概念。
关键字:abstract :尚未完成,表示必须要子类必须完成的任务。
抽象类的作用:就是用来派生子类,被别的类所继承。注意不能实例化。
上边的例子完美化:
package abstr; //P75 Example 4_20 abstract class 动物 { abstract void cry(); } class 狗 extends 动物{ void cry() { System.out.println("汪汪....."); } } class 猫 extends 动物{ void cry() { System.out.println("喵喵....."); } } public class A { public static void cry(动物 dongwu) { dongwu.cry(); } public static void main(String[] args) { 狗 gou=new 狗(); cry(gou); 猫 mao=new 猫(); cry(mao); } }