多态,字面意思:多种状态,就好比有很多个类继承了同一个类Test,我们可以传一个Test类型的参数,而这个Test类型参数的引用可以根据不同情况指向任意一个继承于Test类的子类。这就是多态。我们不用每次都调用子类具体的实现方法,只需要修改父类参数引用指向的对象即可。
public class FruitTest extends Plant
{
public void giveName()
{
System.out.println("FruitTest");
}
public static void main(String[] args)
{
args = new String[]{"0","1"};
Plant plant = new Plant();
plant.giveName();
plant.printName();
Plant plant1 = new FruitTest();//父类的引用可以指向子类的对象,那么就可以称之为多态
FruitTest t = (FruitTest) plant1;//plant1引用指向了一个FruitTest对象,所以可以将一个FruitTest对象的引用t指向plant1;向下强制类型转换。有约束条件。
t.giveName();
VegetablesTest v = new VegetablesTest();
Plant p = v;//向上强制类型转换,因为v引用指向了一个VegetablesTest对象,VegetablesTest类继承于Plant类,所以Plant对象的引用p可以指向v;
p.giveName();
Plant p1 = null;
if("0".equals(args[0]))
{
p1 = new FruitTest();
}
else if("1".equals(args[0]))
{
p1 = new VegetablesTest();
}
p1.giveName();
}
}
class Plant
{
public void giveName()
{
System.out.println("plant");
}
public void printName()
{
System.out.println("print");
}
}
class VegetablesTest extends Plant
{
public void giveName()
{
System.out.println("Vegetables");
}
}
输出结果如下:
plant
print
FruitTest
Vegetables
FruitTest
另外一个类子:
public class Exemple
{
public static void test(A a)
{
a.test();
}
public static void main(String[] args)
{
A a = new B();
test(a);
}
}
class A
{
public void test()
{
System.out.println("A");
}
}
class B extends A
{
public void test()
{
System.out.println("B");
}
}
class C extends A
{
public void test()
{
System.out.println("C");
}
}
输出结果如下:
B
总结:多态的实质就是父类的引用可以指向任意子类的对象。