一、概述
//对象的多态性 //多态的表现,父类型在指向自对象 class animal { } class cat extends animal { } class dog extends animal { } public class Main { public static void main(String[] args) { //一个对象两种形态 animal 小动物 = new cat();//小动物通过猫创建对象,动物类在指向 /* * 猫这类事物具备猫的形态,又具备动物的形态。 * 这就是事物的多态性 * 也就是一个对象对应着不同的类型 * 多态在代码中的体现: * (父类/接口)的引用指向了其子类的对象 * */ } }
abstract class animal { abstract void sing();//叫 } class cat extends animal { void sing() { System.out.println("喵喵叫"); } void fun()//猫的特有功能 { System.out.println("捉老鼠"); } } class dog extends animal { void sing() { System.out.println("汪汪叫"); } void fun()//狗的特有功能 { System.out.println("看家"); } } class pig extends animal { void sing() { System.out.println("哼哼叫"); } void fun() { System.out.println("拱地"); } } public class Main { public static void main(String[] args) { //一只猫 cat 小猫 = new cat(); 小猫.sing(); //很多猫 cat 二猫 = new cat(); cat 三猫 = new cat(); catqun(二猫); catqun(三猫); //.... //多态的体现,多只动物 dog 小狗1号 = new dog(); cat 小猫1号 = new cat(); catqun(小狗1号); catqun(小猫1号); catqun(new pig();); } static void catqun(animal c)//animal c = new cat()/dog()/pig(); { c.sing(); } }
static void catqun(animal c) { c.sing(); // c.fun();->animal里没有fun这个方法 }
abstract class animal { abstract void sing();//叫 } class cat extends animal { void sing() { System.out.println("喵喵叫"); } void fun()//猫的特有功能 { System.out.println("捉老鼠"); } } class dog extends animal { void sing() { System.out.println("汪汪叫"); } void fun()//狗的特有功能 { System.out.println("看家"); } } class pig extends animal { void sing() { System.out.println("哼哼叫"); } void fun() { System.out.println("拱地"); } } public class Main { public static void main(String[] args) {//以前指挥对象做事 /* * cat 小猫 = new cat(); 小猫.sing(); */ animal a = new cat();//自动类型提升,猫对象提升到了动物,类似byte x = 3;int y = x; a.sing(); //PS:猫一旦提升到了动物,但是其特有功能无法访问。 //专业说法,向上转型。目的:限制对特有功能的访问 //如果还行用猫的特有功能 //就可以将该对象,向下转型 cat c = (cat)a;//将动物a,向下转型为了猫c c.fun(); // 向下转型的目的:是为了使用子类中特有的方法 /*animal d = new animal(); * animal f = new dog(); * cat g = (cat)f; cat e = (cat)d;这种类型不允许,小动物就一定是猫么*/ } }
/* * BLF和BLF2的故事 * BLF2是BLF的儿子 * */ class BLF { void 功能() { System.out.println("用C++写程序"); } void 说英语() { System.out.println("hello,world"); } } class BLF2 extends BLF { void 功能() { System.out.println("用java写程序"); } void 说汉语() { System.out.println("你好,世界"); } } public class Main { public static void main(String[] args) { BLF x = new BLF2();//一天BLF2冒充BLF x.功能();//只能是用java写程序,因为BLF2只会java x.说英语();//可以,让BLF2像BLF一样,说英语 //x.说汉语();//不可以,BLF2已经向上转型为BLF,禁止了BLF2特有功能的使用 BLF2 Z = (BLF2)x;//变回来 Z.说汉语(); } }
原文:http://blog.csdn.net/wjw0130/article/details/39466489