JAVA多态

多态是指当系统A访问系统B的服务时,系统B可以通过多种方式来提供服务,而这一切对系统A是透明的.比如动物园的饲养员能够给各种各样的动物喂食.下图显示了饲养员Feeder,食物Food和动物Animal及它的子类的类框图.

JAVA多态

可以把Feeder,Animal和Food都看成独立的子系统.Feeder类的定义如下:

public class Feeder{

public void feed(Animal animal,Food food){

animal.eat(food);

}

}

以下程序演示了一个饲养员分别给一只狗喂肉和猫喂鱼.

Feeder feeder=new Feeder();

Animal animal=new Dog();

Food food=new Bone();

feeder.feed(animal,food);//给dog喂肉

animal=new Cat();

food=new Fish();

feeder.feed(animal,food);//给cat喂鱼

以上animal变量被定义为Aniaml类型,但实际上有可能引用Dog或Cat的实咧.在Feeder类的feed()方法中调用animal.eat()方法,Java虚拟机会执行animal变量所引用的实咧的eat()方法.可见animal变量有多种状态,一会儿是猫,一会儿是狗,这个就是多态的字母含义.

Java语音允许某个类型的引用变量引用子类的实咧,而且可以对这个引用变量进行类型转换.

Animal animal=new Dog();

Dog dog=(Dog)animal;

Creature creature=animal;

如果把引用变量转换为子类类型,则称为向下转型,如果把引用变量转换为父类类型,则称为向上转型.在进行引用变量的转换时,会受到各种静态属性,静态方法,实烈方法,以及从父类中继承的方法和属性时,Java虚拟机会采用不同的绑定机制.

通过具体的例子来演示多态的各种特性.在下图中父类Base和子类Sub中都定义了实例变量var,实例方法method(),静态变量staticVar和静态方法staticMethod(),此外,在Sub类中还定义了实例变量subVar和subMethod().

JAVA多态

Sub.java:

package poly;

class Base{

String var="BaseVar";//实例变量

static String staticVar="StaticBaseVar";//静态变量

void method(){     //实例方法

System.out.println("Base method");

}

static void staticMethod(){  //静态方法

System.out.println("Static Base method");

}

}

public class Sub extends Base{

String var="SubVar";   //实例变量

static  String staticVar="StaticSubVar';  // 静态变量

void method(){  //覆盖父类的method()方法

System.out.println("Sub method");

}

static void staticMethod(){         //隐藏父类的staticMethod()方法

Syatem.out.println("Static Sub method");

}

String subVar="Var only belonging to Sub";

void subMethod(){

System.out.println("Method only belonging to Sub");

}

public static void main(String args[]){

Base who=new Sub();     //who被声明为Base类型,引用Sub实例

System.out.println("who.var="+who.var);   //打印Base类的var变量

System.out.println("who.staticVar="+who.staticVar); //打印Base类的staticVar变量

who.method();   //打印Sub实例的method()方法

who.staticMethod();     //打印Base类的staticMethod()方法

}

}

今天先写这么多,请多多指教.

上一篇:安卓开发笔记(十二):SQLite数据库储存(上)


下一篇:Solr初步学习